为UINavigationController制作一个自定义后退button
我正在开发iOS 4.2+的应用程序。 我subclassed我的UINavigationController
插入两个UIImageView
,并使导航栏外观自定义。 一切都很好,但我有一个小问题。 我创build了自定义的UIBarButtonItem
并在我的视图控制器,我把他们:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
它的工作原理也是如此,但问题是,要做到这一点,我需要从以下位置调用它:
- (void)viewDidAppear:(BOOL)animated ;
所以它只出现在animation之后,我可以看到非定制的button1秒之前定制的一个取代它。
(我试着viewWillAppear
但没有在导航栏中追加)
我想知道你是否有解决scheme可以纠正这个问题。
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]; }
假设您有两个ViewController,A和B,当A是最顶层的时候,您将B推入堆栈,并且您想要定制当B处于顶层时显示的后退button。
通常情况下,执行此操作的方法是设置ViewController A的navigationItem.backBarButtonItem
。
相反,你正在做的是通过设置其navigationItem.leftBarButtonItem
给ViewController B一个自定义button在左侧的导航栏。
你已经实现了这个方法,除了即使你没有设置ViewController A的navigationItem.backBarButtonItem
,默认情况下你仍然会得到一个默认的后退button。 所以这个button可能会显示在您的自定义后退button之上。
如果你设置ViewController B的navigationItem.hidesBackButton = YES
那么你不应该有任何问题。
而在将来,当你实现自定义后退button,你应该通过设置navigationItem.backBarButtonItem
来代替navigationItem.leftBarButtonItem
。 你必须做的一个调整就是用这种方法,例如你可以使用ViewController A的navigationItem
来改变当ViewController B在最前面时显示的后退button。
UIBarButtonItem *backButton = [UIBarButtonItem new]; [backButton setTitle:@"Back"]; [[self navigationItem] setBackBarButtonItem:backButton];
这个代码,你必须在前面的视图控制器中提到,然后只有它的默认后退button进入下一个视图控制器。
请享用!!!
我想出了一个有点通用的解决scheme: https : //stackoverflow.com/a/16831482/171933它涉及UIViewController类别,并需要最less的代码,在所有的屏幕上有一个图像返回button。