UINavigationController在视图切换中起着非常重要的作用。
这里自己定制一个UINavigationController的对象,首先来了解下UINavigationController的结构组成:UINavigation bar, UINavigation view ,UINavigation toolbar........
这里先定制UINavigationBar
关键代码如下:
//初始化的navigationController
//Metrics指标有两种:UIBarMetricsDefault,UIBarMetricsLandscapePhone,
UINavigationBar *naviBar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
[naviBar setBackgroundImage:[UIImage imageNamed:@"top_navi"] forBarMetrics:UIBarMetricsDefault];
[naviBar setBarStyle:UIBarStyleDefault];
//设置navigationItem
UINavigationItem *naviItem = [[UINavigationItem alloc]init];
naviItem.title = @"firstView";
//设置UIBarButtonItem对象barButtonItem
UIImage *imageBtn = [UIImage imageNamed:@"top_camera"];
UIButton *AlertBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[AlertBtn setFrame:CGRectMake(0, 0, imageBtn.size.width, imageBtn.size.height)];
[AlertBtn setTitle:@"Alert" forState:UIControlStateNormal];
//点击AlertBtn,触发cancelAction事件
[AlertBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside];
[AlertBtn setShowsTouchWhenHighlighted:YES];
[naviBar pushNavigationItem:naviItem animated:YES];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc]initWithCustomView:AlertBtn];
[naviItem setRightBarButtonItem:barButtonItem];
[self.view addSubview:naviBar];
思路:
首先定制UINavigationBar,定制它的大小
然后定制UINavigationItem,包括它的主题视图titleView,rightBarButtonItem等等,并定义了UIBarButtonItem对象的触发方法。
效果如下: