7

将界面按钮项拖放到Interface Builder中故事板的视图控制器导航栏上很容易。这样,您可以设置视图控制器的导航项目的出口leftBarButtonItemrightBarButtonItem。但也有一个backBarButtonItem插座,并且如何设置它并不明显。如何使用Interface Builder设置自定义后台按钮项目?在故事板中配置视图控制器导航条的backBarButtonItem

回答

18
  • 选择要更改其导航项目视图控制器。显示视图控制器标识的黑色条变为其引用对象的图标化托盘。

  • 将对象库中的酒吧按钮项目拖放到托盘上。

Storyboard view of a navigation controller and subordinate table view controller

  • 在视图控制器的导航项目在左手侧的主要目的盘上单击右键。将新添加的按钮连接为导航项目的backBarButtonItem插座。

Interface Builder screenshot illustrating how to wire up the back bar button outlet

  • 选择栏按钮,并在你的属性检查器选择的方式进行配置。

Screenshot of the attributes inspector in Interface Builder showing options for the back bar button item

+4

我的导航项目已经有了一个'backBarButtonItem'连线(因为它是push segue的目的地)并且它是不可更改的。似乎没有办法真正改变后退按钮的标题 - 在属性检查器中设置“后退按钮”字段不起作用。 – wcochran 2012-07-19 18:45:18

+0

如果您正在寻求解决方案,并且您发现以编程方式执行此操作令人不快,我鼓励您为此创建一个单独的问题。不幸的是,你的情况我还没有遇到过。 – warrenm 2012-07-19 19:24:34

+1

@wcochran - 这也发生在我身上。这是Xcode中的一个小疏忽,解决方法是在对象库中选择UIBarButtonItem,然后将其拖到UINavigationItem的左侧栏按钮项上。你会看到一个蓝色的矩形出现,然后它会设置它,你可以像往常一样配置它。 – 2014-12-07 21:41:19

1

在界面生成器中,您可以更改导航项返回按钮的标题。

以编程方式,您可以在视图控制器的viewDidLoad方法中设置自定义后退按钮。在这个例子中,我们将按钮的图像设置为名为“customImage.png”的图像:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStyleBordered target:self action:nil]; 

    // Set custom image here 
    backButton.image = [UIImage imageNamed:@"customImage.png"]; 
    self.navigationItem.backBarButtonItem = backButton; 
} 
+0

这是不正确。查看我的答案,了解如何在Interface Builder中配置其他按钮属性。 – warrenm 2012-03-27 17:11:48

+0

@ warrenm也提供链接。所以用户可以直接得到这个答案。 – Ayaz 2013-03-28 06:30:20

+0

好的,[这里](http://stackoverflow.com/a/9894298/155187)。 – warrenm 2013-03-28 23:53:32

16

如@wcochran如上所述,与viewControllers工作时被推到一个navigationController的堆栈,该backBarButtonItem出口已经有线和不能改变。此外,选择儿童VC的navigationItem并更改IB中的后退按钮文本不会达到您所期望的。

现在你可能会认为替换孩子VC的backBarButtonItem可以解决问题,但事实并非如此。令人迷惑的是,如果你想设置一个孩子VC的后退按钮的标题,你必须设置其的后退按钮标题,像这样(!):

- (void)viewWillAppear:(BOOL)animated // in the parent VC! 
{ 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 
} 

这不会做父VC上的任何东西。事实上,如果父级是navigationController的RootViewController,则根本不会有后退按钮。但孩子会继承(或拾取)您创建的后退按钮。

这只适用于直接子VC,所以如果你想通过navigationController的堆栈保持标签下来,你需要将它设置在每个父级。

感谢#iphonedev中的@wiliz向我解释这一点。

+0

我很早就回到iOS开发中,尽管我们需要做出诸如此类的黑客攻击, iOS 3.1.2的情况并没有太大的改变。谢谢你的回答。 – 2013-08-22 08:58:38

3

正如@AdamBlock指出的,你必须在父VC中设置正确的东西。

他显示了如何以编程方式执行此操作。在界面构建器中也可以这样做。

  • 选择父VC
  • 选择导航项目
  • 打开属性检查器
  • 设置标题的后退按钮。
相关问题