Navigation Bar的简单设置

摘要:
-(BOOL)应用程序:navController.view];自己导航项。title=@“标题”;然后执行self。导航项。titleView=myLabel;移除自身。导航项。title=@“title”;

前面的一篇文章《iOS开发16:使用Navigation Controller切换视图》中的小例子在运行时,屏幕上方出现的工具栏就是Navigation Bar,而所谓UINavigationItem就可以理解为Navigation Bar中的内容,通过编辑UINavigationItem,我们可以使得在Navigation Bar中显示想要的东西,比如设置标题、添加按钮等。

这篇博客将会以一个小例子来演示如何设置UINavigationItem。

现在我用的是Xcode 4.3,在使用上跟Xcode 4.2差不多。

1、首先运行Xcode 4.3,创建一个Single View Application,名称为UINavigationItem Test:

Navigation Bar的简单设置第1张

2、其次,我们要使得程序运行时能够显示Navigation Bar:

2.1 单击AppDelegate.h,向其中添加属性:

@property (strong, nonatomic) UINavigationController *navController;

2.2 打开AppDelegate.m,在@synthesize viewController = _viewController;之后添加代码:

@synthesize navController;

#pragma mark - 
#pragma mark Application lifecycle

2.3 修改didFinishLaunchingWithOptions方法代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    
    self.navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
    [self.window addSubview:navController.view];
    
    [self.window makeKeyAndVisible];
    return YES;
}

此时运行程序,会发现出现了Navigation Bar:

Navigation Bar的简单设置第2张

下面讲一下关于NavigationItem的简单设置。

3、设置标题:

打开ViewController.m,在viewDidLoad方法中[super viewDidLoad];之后添加代码:

self.navigationItem.title = @"标题";

运行:

Navigation Bar的简单设置第3张

4、自定义标题,设置titleView:

如果我们想改变标题的颜色和字体,就需要自己定义一个UILabel,并且已经设置好这个Label的内容,可以设置自己想要的字体、大小和颜色等。然后执行self.navigationItem.titleView = myLabel;就可以看到想要的效果。

4.1 打开ViewController.h,向其中添加属性:

@property (strong, nonatomic) UILabel *titleLabel;

4.2 打开ViewController.m,在@implementation ViewController下面一行添加代码:

@synthesize titleLabel;

4.3 在viewDidLoad方法中,去掉self.navigationItem.title = @"标题";,并添加代码:

//自定义标题
titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0 , 100, 44)];
titleLabel.backgroundColor = [UIColor clearColor];  //设置Label背景透明
titleLabel.font = [UIFont boldSystemFontOfSize:20];  //设置文本字体与大小
titleLabel.textColor = [UIColor colorWithRed:(0.0/255.0) green:(255.0 / 255.0) blue:(0.0 / 255.0) alpha:1];  //设置文本颜色
titleLabel.textAlignment = UITextAlignmentCenter;
titleLabel.text = @"自定义标题";  //设置标题
self.navigationItem.titleView = self.titleLabel;

运行:

Navigation Bar的简单设置第4张

实际上,不仅仅可以将titleView设置成Label,只要是UIView的对象都可以设为titleView,例如,将4.3中的代码改成:

UIButton *button = [UIButtonbuttonWithType: UIButtonTypeRoundedRect];
[button setTitle: @"按钮" forState: UIControlStateNormal];
[button sizeToFit];
self.navigationItem.titleView = button;

则运行起来效果如下:

Navigation Bar的简单设置第5张

5、为Navigation Bar添加左按钮

以下是进行leftBarButtonItem设置的代码:

self.navigationItem.leftBarButtonItem = (UIBarButtonItem *)
self.navigationItem.leftBarButtonItems = (UIBarButtonItem *)
self.navigationItemsetLeftBarButtonItem:(UIBarButtonItem *)
self.navigationItemsetLeftBarButtonItem:(UIBarButtonItem *) animated:(BOOL)
self.navigationItemsetLeftBarButtonItems:(NSArray *)
self.navigationItemsetLeftBarButtonItems:(NSArray *) animated:(BOOL)

其实很简单,只要定义好一个UIBarButtonItem,然后执行上述某行代码就行了。

5.1 为了使得运行时不出错,我们在ViewController.m中添加一个空方法,由将要创建的左右按钮使用:

//空方法
-(void)myAction {

}

5.2 添加一个左按钮:

在ViewDidLoad方法最后添加代码:

//添加左按钮
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]  
                                        initWithTitle:@"左按钮"  
                                        style:UIBarButtonItemStylePlain  
                                        target:self   
                                        action:@selector(myAction)];
[self.navigationItem setLeftBarButtonItem:leftButton];

运行效果如下:

Navigation Bar的简单设置第6张

创建一个UIBarButtonItem用的方法主要有:

[UIBarButtonItemalloc]initWithTitle:(NSString *) style:(UIBarButtonItemStyle) target:(id) action:(SEL)
[UIBarButtonItemalloc]initWithBarButtonSystemItem:(UIBarButtonSystemItem) target:(id) action:(SEL)

在第一个方法中,我们可以使用的按钮样式有:

UIBarButtonItemStyleBordered
UIBarButtonItemStyleDone
UIBarButtonItemStylePlain

效果分别如下:

Navigation Bar的简单设置第7张     Navigation Bar的简单设置第8张     Navigation Bar的简单设置第9张

看上去第一个和第三个样式效果是一样的。

6、添加一个右按钮

在ViewDidLoad方法最后添加代码:

//添加右按钮
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc]
                                initWithBarButtonSystemItem:UIBarButtonSystemItemUndo
                                target:self
                                action:@selector(myAction)];
self.navigationItem.rightBarButtonItem = rightButton;

运行如下:

Navigation Bar的简单设置第10张

这里创建UIBarButtonItem用的方法是

[UIBarButtonItemalloc]initWithBarButtonSystemItem:(UIBarButtonSystemItem) target:(id) action:(SEL)

用了系统自带的按钮样式,这些样式的标签和效果如下:

                  标签      效果                       标签         效果
UIBarButtonSystemItemAction    Navigation Bar的简单设置第11张         UIBarButtonSystemItemPause        Navigation Bar的简单设置第12张
UIBarButtonSystemItemAdd    Navigation Bar的简单设置第13张         UIBarButtonSystemItemPlay        Navigation Bar的简单设置第14张 
UIBarButtonSystemItemBookmarks    Navigation Bar的简单设置第15张         UIBarButtonSystemItemRedo        Navigation Bar的简单设置第16张 
UIBarButtonSystemItemCamera    Navigation Bar的简单设置第17张         UIBarButtonSystemItemRefresh        Navigation Bar的简单设置第18张 
UIBarButtonSystemItemCancel    Navigation Bar的简单设置第19张         UIBarButtonSystemItemReply        Navigation Bar的简单设置第20张 
UIBarButtonSystemItemCompose    Navigation Bar的简单设置第21张        UIBarButtonSystemItemRewind        Navigation Bar的简单设置第22张 
UIBarButtonSystemItemDone    Navigation Bar的简单设置第23张         UIBarButtonSystemItemSave        Navigation Bar的简单设置第24张 
UIBarButtonSystemItemEdit    Navigation Bar的简单设置第25张        UIBarButtonSystemItemSearch        Navigation Bar的简单设置第26张 
UIBarButtonSystemItemFastForward    Navigation Bar的简单设置第27张        UIBarButtonSystemItemStop        Navigation Bar的简单设置第28张 
UIBarButtonSystemItemOrganize    Navigation Bar的简单设置第29张         UIBarButtonSystemItemTrash        Navigation Bar的简单设置第30张 
UIBarButtonSystemItemPageCurl    Navigation Bar的简单设置第31张        UIBarButtonSystemItemUndo        Navigation Bar的简单设置第32张 

注意,UIBarButtonSystemItemPageCurl只能在Tool Bar上显示。

7、添加多个右按钮

在ViewDidLoad方法中最后添加代码:

//添加多个右按钮
UIBarButtonItem *rightButton1 = [[UIBarButtonItem alloc]
                                initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                target:self
                                action:@selector(myAction)];
UIBarButtonItem *rightButton2 = [[UIBarButtonItem alloc]
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                 target:nil
                                 action:nil];
UIBarButtonItem *rightButton3 = [[UIBarButtonItem alloc]
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
                                 target:self
                                 action:@selector(myAction)];
UIBarButtonItem *rightButton4 = [[UIBarButtonItem alloc]
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                 target:nil
                                 action:nil];
UIBarButtonItem *rightButton5 = [[UIBarButtonItem alloc]
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize
                                 target:self
                                 action:@selector(myAction)];
NSArray *buttonArray = [[NSArray alloc]
                        initWithObjects:rightButton1,rightButton2,
                        rightButton3,rightButton4,rightButton5, nil];
self.navigationItem.rightBarButtonItems = buttonArray;

为了更好的显示效果,把设置titleView以及设置leftBarButtonItem的代码注释掉,运行效果如下:

Navigation Bar的简单设置第33张

上面的UIBarButtonSystemItemFixedSpace和UIBarButtonSystemItemFlexibleSpace都是系统提供的用于占位的按钮样式。

8、设置Navigation Bar背景颜色

在viewDidLoad方法后面添加代码:

//设置Navigation Bar颜色
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:(218.0/255.0) green:(228.0 / 255.0) blue:(250.0 / 255.0) alpha:1];

运行如下:

Navigation Bar的简单设置第34张

9、设置Navigation Bar背景图片

首先将准备好作为背景的图片拖到工程中,我用的图片名称是title_bg.png。

将上面的代码改成:

//设置Navigation Bar背景图片
UIImage *title_bg = [UIImage imageNamed:@"title_bg.png"];  //获取图片
CGSize titleSize = self.navigationController.navigationBar.bounds.size;  //获取Navigation Bar的位置和大小
title_bg = [self scaleToSize:title_bg size:titleSize];//设置图片的大小与Navigation Bar相同
[self.navigationController.navigationBar 
     setBackgroundImage:title_bg
     forBarMetrics:UIBarMetricsDefault];  //设置背景

之后,在ViewController.m中添加一个方法用于调整图片大小:

//调整图片大小
- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{
    UIGraphicsBeginImageContext(size);
    [img drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}

运行:

Navigation Bar的简单设置第35张

免责声明:文章转载自《Navigation Bar的简单设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Windows编程】系列第七篇:Menubar的创建和使用视图的用处下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS NSString 截取字符串(根据索引截取)

1. rangeOfString:截取指定字符串的长度; 2. substringToIndex:7:截取从0 索引到指定索引(7)长度的字符串 (从0到7)3. substringFromIndex:9:截取从指定索引(9)到末尾长度的字符串  (从9到0)4. substringWithRange:NSMakeRange(4,2):截取从指定索引(4)...

增加wamp64 PHP支持版本

1.停止WAMP服务器.2.下载要安装的PHP版本。下载Window版本的ZIP包啦:http://php.net/downloads.php。解压到 Wamp的安装目录C:wamp64inphpphp7.2.13.从已存在的php版本文件中(如phpphp7.1.9 (C:wamp64inphpphp7.1.9)复制以下文件: - php.ini、php...

ios原生项目内嵌u3d工程

本文一反常态,目标是把u3d工程以framewWork形式 内嵌原生IOS项目 1、xcode中新建Cocoa Touch FrameWork。取名u3dFrameWork 2、把u3d导出的xcode中,Class、Library 拷贝到u3dFrameWork 中 采用  方式引入 从library中移除掉libil2cpp 3 以下头文件移动到pub...

网络渗透资料大全单——漏洞库篇

漏洞库 NVD        ——美国国家漏洞库      →http://nvd.nist.gov/。 CERT        ——美国国家应急响应中心      →https://www.us-cert.gov/ OSVDB        ——开源漏洞库      →http://osvdb.org Bugtraq        —...

JavaScript核心之事件详解(EventTarget接口,js事件传播,Event对象)

事件是一种异步编程的实现方式,本质上是程序各个组成部分之间传递的特定消息。DOM支持大量的事件,本节介绍DOM的事件编程。 1 EventTarget接口DOM的事件操作(监听和触发),都定义在EventTarget接口。Element节点、document节点和window对象,都部署了这个接口。此外,XMLHttpRequest、AudioNode、A...

基于WPF系统框架设计(6)-整合MVVM框架(Prism)

应用场景 我们基础的框架已经搭建起来了,现在整合MVVM框架Prism,在ViewModel做一些逻辑处理,真正把界面设计分离出来。 这样方便我们系统开发分工合作,同时提高系统可维护性和灵活性。 具体的Prism安装和Microsoft.Practices.Prism.dll获取,在这个网址:http://compositewpf.codeplex.com...