导航控制器-1

uinavigationcontroller还有2个子类uiimagepickercontroller和uivideoeditorcontroller.

视图上元素尺寸

顶部状态栏20px

导航栏44/32px

导航栏上按钮图标或者tabbar上按钮图标20*20px

底部tabbar44/32px

 

导航控制底部还有个toolbar,默认是隐藏的,这个一般不用。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.tabBarController.tabBar setHidden:NO];
    [self.navigationController setToolbarHidden:NO animated:YES];
    
}

 添加一个tap手势,来实现navigatebar的显示于隐藏

- (void)mytap:(UITapGestureRecognizer *)gesture
{
    BOOL flag = self.navigationController.navigationBar.hidden;
    [self.navigationController.navigationBar setHidden:!flag];
}


导航控制器的主要属性

1) topViewController和visibleViewContoller都是获取栈顶视图控制器

2)viewControllers是获取导航控制里所有的视图控制器

3)navigationBarHidden获取导航控制栏是否隐藏

4)navigationBar获取导航控制栏

 

导航控制的常用方法

1)pushxxx把下一个控制器推出来

2)popxxxx把当前控制器推出去

3)poptoXXX把当前控制器弹出去以后再跳到一个控制器

4)poptorootcontroller,把当前视图控制器弹出去,再跳转到根视图控制器

 

 一个导航控制器包含4个对象,uinavigationcontroller,uinavigationbar,uiviewcontroller,uinavigationitem.

 一个导航控制器只有一个导航栏uinavigationbar,导航栏上有uinavigationitem,但是uinavigationbar并不控制uinavigationitem.这个uinavigationitem是由每一个视图控制器来控制。

 

 uinavigationbar右侧是可以自定义,

 

uinavigationbar上的title部分可以设置一个uiview

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    
    [self.view setBackgroundColor:[UIColor yellowColor]];
    UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 44)];
    [titleView setBackgroundColor:[UIColor redColor]];
    self.navigationItem.titleView = titleView;
    
}

 

 设置导航栏的一些属性

// 设置风格
    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
    // 设置颜色
    [self.navigationController.navigationBar setTintColor:[UIColor redColor]];
    // 设置透明
    [self.navigationController.navigationBar setTranslucent:YES];

 

设置隐藏返回按钮

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self.navigationItem setHidesBackButton:YES];
    [self.navigationController setToolbarHidden:YES];
}

表明toolbar和navigationbar这些是由navigationcontroller来控制,按钮则是由控制器来控制

prompt提示属性

  self.navigationItem.prompt = @"hello world";

 

 设置左右两边按钮

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [self.navigationItem setHidesBackButton:YES];
    [self.navigationController setToolbarHidden:YES];
    //self.navigationItem.prompt = @"hello world";
    
    UIBarButtonItem *leftbtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:nil];
    self.navigationItem.leftBarButtonItem = leftbtn;
    UIBarButtonItem *rightbtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:nil];
    self.navigationItem.rightBarButtonItem = rightbtn;
    
}


 

 uibarbuttonitem还可以自定义按钮

 有一个initwithcustomview方法,可以设置自定义视图。

 

自定义返回按钮

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mytap:)];
    [self.view addGestureRecognizer:tap];
    
    
    
    UIButton *mybtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [mybtn setFrame:CGRectMake(0, 0, 22, 22)];
    [mybtn setImage:[UIImage imageNamed:@"返回"] forState:UIControlStateNormal];
    
    UIBarButtonItem *backitem = [[UIBarButtonItem alloc] initWithCustomView:mybtn];
    
    self.navigationItem.leftBarButtonItem = backitem;

    
}



 

uinavigationbar的背景可以使用一个图片。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.navigationItem.backBarButtonItem setTitle:@"返回"];
    UIImage *image = [UIImage imageNamed:@"title"];
    UIColor *titleColor = [UIColor colorWithPatternImage:image];
    [self.navigationController.navigationBar setTintColor:titleColor];
}


 

设置navigationbar的背景图片

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.navigationItem.backBarButtonItem setTitle:@"返回"];
    UIImage *image = [UIImage imageNamed:@"title"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

 

 在navigationbar的标题上添加一个custom按钮

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.navigationItem.backBarButtonItem setTitle:@"返回"];
    UIImage *image = [UIImage imageNamed:@"title"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTitle:@"这里是标题按钮" forState:UIControlStateNormal];
    [btn setFrame:CGRectMake(0, 0, 120, 30)];
    self.navigationItem.titleView = btn;
}


这里按钮没有设置图片,按钮的样式是自定义的使用的就是导航控制器的图片。

 

导航控制器内的toolbar默认是隐藏的。

 

导航控制器的代理方法,willshow,didshow

可以捕获将要显示的视图控制器,和已经显示的视图控制器

视图控制器代理设置

 

 

posted on 2013-10-03 12:35  老猫zl  阅读(458)  评论(0编辑  收藏  举报