繁体   English   中英

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

[英]Make a custom back button for UINavigationController

我正在为iOS 4.2开发应用程序。 我将我的UINavigationController子类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];
}

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

通常,这样做的方法是设置ViewController AnavigationItem.backBarButtonItem

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

你已经很好地实现了这个方法,除非你没有设置ViewController AnavigationItem.backBarButtonItem ,默认你仍然会得到一个默认的后退按钮。 因此,该按钮可能会显示在您的自定义后退按钮之上。

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

而在未来,当你自定义实现后退按钮,你应该设置这样做navigationItem.backBarButtonItem代替navigationItem.leftBarButtonItem 你需要做的一个调整是,使用这种方法,例如你可以使用ViewController AnavigationItem来改变当ViewController B在顶部时显示的后退按钮。

UIBarButtonItem *backButton = [UIBarButtonItem new];

[backButton setTitle:@"Back"];

[[self navigationItem] setBackBarButtonItem:backButton];

您必须在之前的视图控制器中提及此代码,然后只有默认后退按钮才会出现在下一个视图控制器中。

请享用!!!

我提出了一个有点通用的解决方案: https//stackoverflow.com/a/16831482/171933它涉及UIViewController上的一个类别,并且需要最少的代码才能在所有屏幕上都有一个图像后退按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM