为UINavigationController创建一个自定义后退按钮

Tri*_*ane 4 uinavigationbar uinavigationcontroller uibarbuttonitem viewdidappear ios

我正在为iOS 4.2开发应用程序.我将子类UINavigationController插入两个UIImageView并使导航栏看起来是自定义的.一切都很好,但我有一点问题.我创建了自定义UIBarButtonItem和我的视图控制器内部我把它们:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
Run Code Online (Sandbox Code Playgroud)

它也有效,但问题是,为了完成这项工作,我需要调用它:

 - (void)viewDidAppear:(BOOL)animated ;
Run Code Online (Sandbox Code Playgroud)

因此它只出现在动画之后,我可以看到非自定义按钮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];
}
Run Code Online (Sandbox Code Playgroud)

yuj*_*uji 18

假设您有两个ViewControllers,A和B,当A位于最顶端时,您将B推入堆栈,并且您想要自定义B位于顶部时显示的后退按钮.

通常情况下,要做到这一点的方法是设置的ViewController 一个navigationItem.backBarButtonItem.

相反,你正在做的是通过设置它来为ViewController B提供导航栏左侧的自定义按钮navigationItem.leftBarButtonItem.

你已经实施了接近正常,但即使您没有设置的ViewController 一个navigationItem.backBarButtonItem,默认情况下,你仍然可以获得一个默认的后退按钮以及.因此,该按钮可能会显示在您的自定义后退按钮之上.

如果您设置ViewController B,navigationItem.hidesBackButton = YES那么您应该没有任何问题.

在将来,当您实现自定义后退按钮时,您应该通过设置navigationItem.backBarButtonItem而不是navigationItem.leftBarButtonItem.在一个调整,你必须提出的是,使用这种方法,例如你可以使用的ViewController 一个navigationItem来换按钮时显示的ViewController 是在上面.