从navigationController中的aViewController push到bViewController时:
如果bViewController的leftBarButtonItem!=nil,那么将在navigationBar的左边显示bViewController指定的leftBarButtonItem
如果bViewController的leftBarButtonItem==nil,aViewController的backBarButtonItem!=nil,那么将在navigationBar的左边显示aViewController指定的backBarButtonItem
如果两者都为nil,那么navigationBar的左边将显示系统提供的默认返回按钮。
如果两者都为nil,并且指定bViewController的navigationItem.hidesBackButton=YES,那么navigationBar将隐藏左侧按钮。
自定义navigationbar包括更换背景图片,左右键图片(下面两行代码实现)
UILabel *topLab=[[UILabelalloc]initWithFrame:CGRectMake(0,0,320,44)];
topLab.text=@"设置任务";
topLab.textAlignment=1;
[topLab setBackgroundColor:[UIColorcolorWithPatternImage:[UIImageimageNamed:@"top.png"]]];
[self.navigationController.navigationBaraddSubview:topLab];
[topLab release];
UIButton *leftButton = [[UIButtonalloc] initWithFrame:CGRectMake(0,0, 60, 40)];
[leftButton setImage:[UIImageimageNamed:@"back.png"]forState:UIControlStateNormal];
[leftButton addTarget:selfaction:@selector(doLeftBar)forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftItem = [[UIBarButtonItemalloc] initWithCustomView:leftButton];
self.navigationItem.leftBarButtonItem=leftItem;
[leftButton release];
先说一个自定义navigation左右键
self.title = @"第一级视图";
// self.navigationItem.title = @"第一级视图";//设置导航控制标题
//实现一个右边按钮,默认顶级视图是没有左右按钮的
UIBarButtonItem *rigthButton = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStyleBordered target:self action:@selector(editButtonPressed:)];
self.navigationItem.rightBarButtonItem = rigthButton;
[rigthButton release];
//实例化一个可变数组
NSMutableArray *array = [[NSMutableArray alloc] init ];//
self.controllers = array;
[array release];
[self initAllSecondControllers:self.controllers];
更改navigationController push和pop界面切换动画
博客:http://blog.csdn.net/longlongago2000
有时候我们需要自定义navigationController push和pop界面切换动画,用到的代码如下:
For Push:
[cpp] view plaincopy
- MainView *nextView=[[MainView alloc] init];
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.75];
- [self.navigationController pushViewController:nextView animated:NO];
- [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
- [UIView commitAnimations];
- [nextView release];
For Pop:
方法一:
[cpp] view plaincopy
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.75];
- [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
- [UIView commitAnimations];
-
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDelay:0.375];
- [self.navigationController popViewControllerAnimated:NO];
- [UIView commitAnimations];
方法二:
可实现左右滑动动画,可设置滑动方向。
[cpp] view plaincopy
- CATransition* transition = [CATransition animation];
- transition.duration = 0.5;
- transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- transition.type = kCATransitionFade; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
- //transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
- [self.navigationController.view.layer addAnimation:transition forKey:nil];
- [[self navigationController] popViewControllerAnimated:NO];