5

我正在为 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];
}
4

3 回答 3

19

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

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

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

您已经很好地实现了该方法,除了即使您没有设置 ViewController AnavigationItem.backBarButtonItem默认情况下您仍然会获得默认的后退按钮。因此,该按钮可能会显示在您的自定义后退按钮之上。

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

将来,当您实现自定义后退按钮时,您应该通过设置navigationItem.backBarButtonItem而不是navigationItem.leftBarButtonItem. 您必须进行的一项调整是,使用这种方法,例如,您将使用 ViewController A来更改 ViewController B在顶部navigationItem时显示的后退按钮。

于 2012-02-15T21:17:36.683 回答
4
UIBarButtonItem *backButton = [UIBarButtonItem new];

[backButton setTitle:@"Back"];

[[self navigationItem] setBackBarButtonItem:backButton];

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

享受!!!

于 2013-12-19T12:38:35.750 回答
1

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

于 2013-05-30T08:40:36.663 回答