【问题标题】:Buttons added to UINavigationController don't show up until after navigating to next page添加到 UINavigationController 的按钮直到导航到下一页后才会显示
【发布时间】:2013-04-28 04:49:27
【问题描述】:

我提前道歉,因为我在 Objective-C 和 iOS 开发方面是一个完整的初学者,但是我遇到了一个让我非常困惑的问题。我在一个视图中有这段代码,我想把它放在一个叫做“主页”的东西上,它显示在“登录”页面之后。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                             initWithTitle: @"Sign Out"
                                             style: UIBarButtonItemStyleBordered
                                             target: self
                                             action: @selector(logout_Action:)];

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
                                              initWithTitle:@"New"
                                              style:UIBarButtonItemStyleBordered
                                              target:self
                                              action:@selector(new_Action:)];
    [self.navigationItem.backBarButtonItem release];
    [self.navigationItem.rightBarButtonItem release];

    self.navigationItem.hidesBackButton = NO;

不幸的是,直到用户导航到 NEXT 页面,即单击我已声明的“新建”按钮,该“退出”按钮才会显示。

有趣的是 rightBarButtonItem 实际上看起来工作得很好。任何有关如何解决此问题的指示将不胜感激。提前致谢!

【问题讨论】:

    标签: ios objective-c uinavigationcontroller


    【解决方案1】:

    当你做这样的事情时:

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                             initWithTitle: @"Sign Out"
                                             style: UIBarButtonItemStyleBordered
                                             target: self
                                             action: @selector(logout_Action:)];
    

    这将设置返回到此视图控制器的返回按钮,而不是当前显示的返回按钮。这就是为什么当您转到“新建”页面时会显示退出按钮的原因,因为您刚刚更改了将返回主屏幕的后退按钮。

    因此,如果您想更改后退按钮,请将这段代码放在 PREVIOUS 视图控制器中,即通向主页的那个。示例:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // In view controller that comes BEFORE the "Home page"
    
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                                 initWithTitle: @"Sign Out"
                                                         style: UIBarButtonItemStyleBordered
                                                        target: homeScreenController
                                                        action: @selector(logout_Action:)];
    

    希望这是有道理的。

    【讨论】:

    • 这是有道理的,但是可以通过以下几种方式进入主页:1) 通过登录,2) 通过从另一个页面返回。在第二种情况下,我在哪里设置 backBarButtonItem?
    • 如果你从登录页面->主屏幕->另一个页面,然后从另一个页面回击回到主屏​​幕,返回按钮应该还是和以前一样。
    • 另外,目标需要是具有“logout_Action”方法的视图控制器,我将编辑我的答案。
    • 我想要完成的是:
    • oops- 这是流程:[登录]->[主页]->[新文档表单]->[文档] --- 现在,在 [文档] 上点击“返回”用户应该返回 [home],而不是新的文档表单。
    【解决方案2】:

    这可能是因为您将后退按钮设置为退出按钮,

    尝试替换

    self.navigationItem.backBarButtonItem

    self.navigationItem.leftBarButtonItem

    【讨论】:

    • 嗯,这行得通-但它现在具有按钮形状,而不是返回形状。
    • 看起来除了创建图像并在此处使用自定义按钮之外,可能没有其他方法可以解决此问题。我想我将不得不重新设计将视图推送到堆栈上的方式,以便我可以适当地按下后退按钮。如果我将退出按钮放在登录页面的堆栈中,然后一些用户返回登录页面,退出按钮会自动恢复吗? (即它是否与堆栈一起保存)
    • 如果你有一个视图控制器可以返回到堆栈中,你只能有一个“本机”返回按钮,是的。如果您认为它回答了您的问题,请接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2014-06-30
    • 2022-01-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多