导航控制器UINavigationController和选项卡栏控制器UI...

[cpp]   view plain copy
  1. <span style="font-size:18px;">一、导航控制器</span>  
[cpp]  view plain copy
  1. 使用术语push(压入)和pop(弹出)分别来描述导航控制器;对于导航控制器下面的场景,也是使用push切换显示的。  
  2.   
  3. 1、导航栏、导航项、栏按钮项  
  4.   
  5.     导航控制器:除了管理视图控制器以外,它还管理一个导航栏(UINavigationBar),后者类似于工具栏,只是使用的是导航项(UINavigationItem)填充的,该实例被加入到导航控制器管理的每个场景中。  
  6.   
  7.     默认情况下,场景的导航项包含一个标题和Back按钮,Back按钮是以栏按钮项(UIBarButtonItem)的方式加入到导航项的,类似栏按钮。  
  8.   
  9. 2、导航控制器UINavigationController详解  
  10.   
  11.     1)、navigationItem  
  12.   
  13.     它是UINavigationController的一个属性,是为后者服务的。每一个加入到UINavigationController的ViewController都会有一个对应的navigationItem,该对象由ViewController以加载的方式创建。  
  14.   
  15.     2)、titleTextAttributes  
  16.   
  17.     这是UINavigationBar的一个属性,,可以设置title部分的字体。  
  18.   
  19.     3)、wantsFullScreenLayout  
  20.   
  21.     这是viewController的一个属性,默认为NO。  
  22.   
  23.     4)、navigationBar的stack  
  24.   
  25.     这个属性是UINavigationController的重点之一,它维护了一个和UINavigationController中的viewControllers对应的navigationItem的stack,该stack用于负责navigationBar的刷新。  
  26.   
  27. 注:  
  28. 如果navigationBar中navigationItem的stack和对应的NavigationController中的viewController的stack是一一对应的关系,那么如果两个stack不同步就会出现异常。  
  29.   
  30.     5)、navigationBar的刷新  
  31.   
  32.     当一个viewController添加到NavigationController以后,navigationBar的显示遵循以下规则:  
  33.   
  34.     1.1、Left side of the navigation  
  35.   
  36.     a)、如果当前的viewController设置了LeftBarButtonItem,则显示当前VC所自带的leftBarButtonItem。  
  37.   
  38.     b)、如果当前的viewController没有设置leftBarButton,且当前VC不是root VC的时候,则显示前一层VC的backBarButtonItem。如果前一层的VC没有显式地指定backBarButtonItem的话,系统将会根据前一层VC的title属性自动生成一个back按钮,并显示出来。  
  39.   
  40.     c)、如果当前的VC没有设置leftBackButtonItem,且当前VC已经是root VC的时候,左边将不显示任何东西。  
  41.   
  42.     注:  
  43.     5.0新增的属性leftItemsSupplementBackButton,通过指定该属性指定的titleView,可以让leftBarButtonItem和backBarButtonItem同时显示,其中leftBarButtonItem显示在backBarButtonItem的右边。  
  44.   
  45.     1.2、title  
  46.   
  47.     a)、如果当前VC通过.navigationItem.titleView指定了自定义的titleView,系统将会显示指定的titleView,此处要注意自定义titleView的高度不要超过navigationBar的高度,否则会显示出界。  
  48.   
  49.     B)、如果当前VC没有指定titleView,系统将会根据当前VC的title或者当前VC的navigationItem.title的内容创建一个UILabel显示,其中如果指定了navigationItem.title的话,则优先显示navigationItem.title的内容。  
  50.   
  51. 1.3、Right side of the navigationBar  
  52.   
  53.     a)、如果当前VC指定了rightBarButtonItem的话,则显示指定的内容;  
  54.   
  55.     b)、如果当前VC没有指定rightBarButtonItem的话,则不显示任何东西。  
  56.   
  57.     6)、Toolbar  
  58.   
  59. NavigationController自定了一个工具栏。  
  60.   
  61.     7)、UINavigationControllerDelegate  
  62.   
  63.     当一个viewController显示的时候发送通知,给用户一个机会进行设置。当需要对某些将要显示的viewController进行修改的话,可实现该代理。  
  64.   
  65.     8)、UINavigationController的viewControllers属性  
  66.   
  67.     通过该属性可以实现一次性替换整个NavigationController的层次,可以指定动画。动画将会从当前的NavigationController所显示的VC跳转到所设置的目标viewController的最顶层的那个VC,而中间其他的VC将会被直接从VC层级中移除并添加进来(没有动画)。  
  68.   
  69.     9)、topViewController VS visibleViewController  
  70.   
  71.     代表当前navigation栈中最上层的VC,而visibleViewController代表当前可见的VC,它可能是topViewController,也可能是当前topViewController present出来的VC。因此这两个属性通常情况下是一样的,但也有可能不同。  
[cpp]  view plain copy
  1. <span style="font-size:18px;">二、UINavigationController示例</span>  
[cpp]  view plain copy
  1. 1、创建项目  
  2.   
  3.     创建一个UINavigationControllerDemo项目,这里使用Empty Application模板。  
  4.   
  5.     创建一个ViewController,单击左下角的"+"按钮,命名为RootViewController,默认选中With XIB...。  
  6.   
  7.     创建好以后,项目会多出三个文件:  
  8.   
  9.   
  10.   
  11. 打开xib,添加一个按钮控件。  
  12.   
  13. 2、添加属性视图  
  14.   
  15. 打开AppDelegate.h  
[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @class ViewController;  
  4.   
  5. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
  6.   
  7. @property (strong, nonatomic) UIWindow *window;  
  8. //添加的两项  
  9. @property (strong, nonatomic) ViewController *viewController;  
  10. @property (strong, nonatomic) UINavigationController *navController;  
  11.    
  12. @end  
[cpp]  view plain copy
  1. 打开AppDelegate.m文件  
[cpp]  view plain copy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  4.     
  5.     //添加代码,创建navController和RootViewController  
  6.     RootViewController *rootView = [[RootViewController alloc] init];  
  7.     rootView.title = @"Root View";  
  8.     self.navController = [[UINavigationController alloc] init];  
  9.     //用push把rootView加入到navController的视图栈中  
  10.     [self.navController pushViewController:rootView animated:YES];  
  11.     [self.window addSubview:self.navController.view];  
  12.        
  13.     // Override point for customization after application launch.  
  14.     self.window.backgroundColor = [UIColor whiteColor];  
  15.     [self.window makeKeyAndVisible];  
  16.     return YES;  
  17. }  
[cpp]  view plain copy
  1. 3、添加UIBarButtonItem  
  2.     分为左右两个。打开RootViewController.m,添加代码  
[cpp]  view plain copy
  1. - (void)viewDidLoad  
  2. {  
  3.   
  4.     [super viewDidLoad];  
  5.     // Do any additional setup after loading the view from its nib.  
  6.        
  7.     UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];  
  8.   
  9.     self.navigationItem.leftBarButtonItem = leftButton;  
  10.        
  11.     UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(selectRightAction:)];  
  12.     self.navigationItem.rightBarButtonItem = rightButton;  
  13. }  
  14. 这样就添加了UIBarButtonItem,可以运行一下看看。<pre name="code" class="cpp">[self.navigationItem setTitle:@"Contacts"];//设置navigationItem</pre>[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"通用头.png"] forBarMetrics:UIBarMetricsDefault];//添加navigationitem的头图片<br>  
  15. <pre></pre>  
  16. <pre name="code" class="cpp">4、响应UIBarButtonItem的事件的实现  
  17.   
  18.     在action:@selector(selectLeftAction:)添加两个方法。打开RootViewController.m文件。  
  19.   
  20. -(void)selectLeftAction:(id)sender{  
  21.     UIAlertView *alert = [[UIAlertView alloc]  
  22.                           initWithTitle:@"提示"  
  23.                           message:@"点击了导航栏左按钮"  
  24.                           delegate:self  
  25.                           cancelButtonTitle:@"确定"  
  26.                           otherButtonTitles:nil, nil];  
  27.   
  28.     [alert show];  
  29. }  
  30.    
  31. -(void)selectRightAction:(id)sender{  
  32.   
  33.     UIAlertView *alert = [[UIAlertView alloc]  
  34.                           initWithTitle:@"提示"  
  35.                           message:@"点击了导航栏右按钮"  
  36.                           delegate:self  
  37.                           cancelButtonTitle:@"确定"  
  38.                           otherButtonTitles:nil, nil];  
  39.     [alert show];  
  40. }  
  41. <span style="font-size:18px;">这样点击左右的UIBarButtonItem时,弹出提示消息。</span>  
  42.   
  43. </pre><br>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值