【问题标题】:Back button on UINavigationControllerUINavigationController 上的后退按钮
【发布时间】:2010-09-27 14:13:23
【问题描述】:

我知道这看起来很奇怪,但我需要在第一个 navigationController 视图的导航栏上添加一个后退按钮。我试过这样:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Foo" style:UIBarButtonItemStyleBordered target:self                                                          action:@selector(foo:)]; 
self.navigationItem.backBarButtonItem=backButton;

如果我写的是 leftBarButtonItem 而不是 backBarButtonItem,则显示按钮。我的问题是我需要一个箭头按钮作为正常的后退按钮。这可能吗?

【问题讨论】:

    标签: iphone uinavigationcontroller back-button


    【解决方案1】:

    通常这是开箱即用的,但有时对于模态视图/操作表,您可能需要它。在您实例化您的视图控制器并将其推送到导航控制器堆栈之前,请尝试

    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil];
        [[self navigationItem] setBackBarButtonItem: newBackButton];
        [newBackButton release];
    
        DetailViewController *detailVC = [[DetailViewController alloc]init];
        [self.navigationController pushViewController:detailVC animated:YES];
        [detailVC release];
    

    【讨论】:

      【解决方案2】:

      我认为您不能在第一个 NavigationController 视图中执行此操作,因为您需要在子控制器被推送之前在 控制器中设置 backBarButtonItem 属性。另外,根据Apple docsbackBarButtonItem 的目标&动作必须是nil

      这个关于creating a left-arrow button on a UIToolbar 的问题可能会让您了解如何使用自定义图像(针对leftBarButtonItem)来解决这个问题。

      【讨论】:

        【解决方案3】:

        或者您也可以执行以下操作 - 我更喜欢这种方法。这是我从另一个帖子中得到的。

        使用我从 http://www.teehanlax.com/blog/?p=447 导出的以下 psd

        http://www.chrisandtennille.com/pictures/backbutton.psd

        然后我只是创建一个自定义 UIView,我在工具栏项的 customView 属性中使用它。

        很适合我。

        希望能有所帮助

        【讨论】:

          【解决方案4】:

          你当然可以这样做。您只需要将leftBarButtonItem的标题更改为back 然后你会得到一个很好的左箭头按钮,标题回来了。然后,您只需将选择器更改为在单击按钮时实际执行一个方法。所以@selector(foo:)

          这里有一些关于如何实现上述目标的代码:

          self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
          self.navigationItem.leftBarButtonItem.title = @"Back";
          self.navigationItem.leftBarButtonItem.target = self;
          self.navigationItem.leftBarButtonItem.action = @selector(endTextEnteringButtonAction:);
          

          如果有帮助,请告诉我。

          【讨论】:

          • 我按照你写的方法试过了,但什么也没出现。在使用您的代码之前我必须设置一个文本栏按钮吗?
          • 伙计们,您需要确保在 did load 方法中设置了委托,并确保按钮在本例中使用相同的方法实例化 leftBarButtonItem,然后您可以开始执行类似的操作我写在答案中
          • 或者如果不是navigationItem...试试navigationController,不管怎样,上面是你设置后退按钮的方法。
          【解决方案5】:

          Apple 文档说:

          当此导航项立即在堆栈中的顶部项下方时,导航控制器会从此导航项派生导航栏的后退按钮。

          因此,如果您的导航项是堆栈的顶部(正如我们在这里讨论的那样),您不能将后退按钮添加到导航控制器,因为没有任何地方可以导航回它,因为它是顶部的项目堆栈。

          更新的答案: 在我搜索之后,我发现在这些 link 中的导航控制器中的根视图控制器中创建一个后退按钮

          这很简单:)

          [self.navigationItem setHidesBackButton:YES animated:YES];
          UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)];
          
          self.navigationItem.leftBarButtonItem = backButton;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-30
            • 1970-01-01
            • 2011-01-15
            • 1970-01-01
            • 1970-01-01
            • 2011-05-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多