为每个屏幕定制NavigationController的后退按钮

时间:2012-05-09 13:10:46

标签: iphone objective-c ios uinavigationcontroller uinavigationbar

我一直在尝试子类化UINavigationController类来修改背景图像,导航栏大小,后退按钮,tittle字体等内容。 经过几个小时和大量的阅读后,我明白我不应该继承UINavigationController类......

我希望有特定的设计并将该设计转移到使用我的自定义NavigationController的所有屏幕......

到目前为止,我还没有为此提供任何优雅的解决方案,大多数解决方案都是基于配置仅在下一个屏幕中显示的内容(下一个视图)。

我怎样才能做到这一点?也许使用类别? 提前谢谢。

4 个答案:

答案 0 :(得分:8)

我正在显示UINavigationcontroller的自定义左栏按钮的代码。您可以在每个视图控制器中添加此代码,也可以在两个按钮(右侧和左侧)中添加此代码

    leftButton = [UIButton buttonWithType:UIButtonTypeCustom];    
    [leftButton setImage:[UIImage imageNamed:@"Yourcutomeimage.png"] forState:UIControlStateNormal];    
    leftButton.frame = CGRectMake(0, 0, 30, 30);
    [leftButton addTarget:self action:@selector(youraction:) forControlEvents:UIControlEventTouchUpInside];  

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:leftButton]autorelease];

//或

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:leftButton]autorelease];

希望,这会对你有帮助..

答案 1 :(得分:1)

是的@Nit是对的,这是自定义UINavigationController的方法,但是如果您不想为每个UIViewController执行此操作,则可以创建UIViewControllerBase } class,它是UIViewController的子类,在viewDidLoad方法中,按照@Nit所描述的方式设置所有按钮,然后让每个UIViewController成为你{的UIViewControllerBase的子类{1}}上课。

答案 2 :(得分:0)

如果要向uinavigationcontroller添加自定义后退按钮,则应使用navigationItem.backBarButtonItem并在初始化uinavigationcontroller的类中实现它。 样本: -

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btnImage.png" style:UIBarButtonItemStyleBordered target:youtarget action:@sel(your action)];  
self.navigationItem.backBarButtonItem = backButton; [backButton release];

答案 3 :(得分:0)

我在这个答案中概述了我的解决方案:https://stackoverflow.com/a/16831482/171933

基本上,您在UIViewController上创建一个类别,并在视图控制器的每个viewWillAppear方法中调用一个方法。