我正在为iOS 4.2开发应用程序。
我将UINavigationController
子类化为插入两个UIImageView
并使导航栏看起来是自定义的。
一切都很好,但我有一点问题。
我创建了自定义UIBarButtonItem
,在我的视图控制器中,我将它们放在:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
它也有效,但问题是,为了完成这项工作,我需要从以下地方调用它:
- (void)viewDidAppear:(BOOL)animated ;
所以它只出现在动画之后,我可以看到非自定义按钮1秒钟,然后自定义按钮替换它。
(我尝试使用viewWillAppear
,但在导航栏中没有任何附加内容)
我想知道您是否有解决此问题的解决方案。
PS:我从不使用IB,一切都是以编程方式制作的。
感谢法国!
编辑1:这里的代码没有显示viewWillAppear
的任何内容:
- (void)viewWillAppear:(BOOL)animated {
[self setTitle:@"Jeu"];
//Bouton testflight
TIFButton *testFeedbackButton = [[TIFButton alloc]init];
[testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal];
[testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton];
self.navigationItem.rightBarButtonItem = testFeedback;
TIFBackButton *backButton = [[TIFBackButton alloc]init];
[backButton setTitle: @"Retour" forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
}
答案 0 :(得分:18)
假设您有两个ViewControllers,A和B,当A位于最顶端时,您将B推入堆栈,并且您想要自定义当B位于顶部时显示的后退按钮。
通常,这样做的方法是设置ViewController A 的navigationItem.backBarButtonItem
。
相反,您正在做的是通过设置navigationItem.leftBarButtonItem
为导航栏左侧的ViewController B 设置自定义按钮。
你已经很好地实现了这种方法,除非你没有设置ViewController A 的navigationItem.backBarButtonItem
,默认情况下你仍然会得到一个默认的后退按钮。因此,该按钮可能会显示在您的自定义后退按钮之上。
如果您设置了ViewController B的navigationItem.hidesBackButton = YES
,那么您应该没有任何问题。
将来,当您实施自定义后退按钮时,您应该通过设置navigationItem.backBarButtonItem
而不是navigationItem.leftBarButtonItem
来实现。您必须进行的一项调整是,使用此方法,例如,您将使用ViewController A 的navigationItem
更改ViewController B时显示的后退按钮排在首位。
答案 1 :(得分:3)
UIBarButtonItem *backButton = [UIBarButtonItem new];
[backButton setTitle:@"Back"];
[[self navigationItem] setBackBarButtonItem:backButton];
此代码必须在之前的视图控制器中提及,然后只有默认后退按钮才会出现在下一个视图控制器中。
享受!!!
答案 2 :(得分:1)
我想出了一个有点普遍的解决方案:https://stackoverflow.com/a/16831482/171933 它涉及UIViewController上的一个类别,并且需要最少的代码才能在所有屏幕上显示图像后退按钮。