在Storyboard中配置View Controller的导航项的backBarButtonItem

war*_*enm 7 interface-builder uibarbuttonitem uinavigationitem uistoryboard

将条形按钮项拖放到Interface Builder中的故事板中的视图控制器导航栏上非常简单.通过这种方式,您可以设置视图控制器导航项的leftBarButtonItemrightBarButtonItem出口.但也有一个backBarButtonItem出路,并没有明显如何设置它.如何使用Interface Builder设置自定义后退栏按钮项?

war*_*enm 18

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

  • 将条形按钮项目从对象库拖放到托盘上.

导航控制器和从属表视图控制器的故事板视图

  • 右键单击左侧主对象托盘中的视图控制器导航项.将新添加的按钮连接为导航项目的backBarButtonItem插座.

Interface Builder屏幕截图,说明如何连接后排按钮插座

  • 选择条形按钮并以您使用"属性"检查器选择的任何方式对其进行配置.

Interface Builder中属性检查器的屏幕截图,显示后栏按钮项的选项

  • 我的导航项已经有一个`backBarButtonItem`连线(因为它是推送segue的目的地)并且它是不可更改的.似乎无法实际更改后退按钮的标题 - 在"属性"检查器中设置"后退按钮"字段无效. (4认同)

sum*_*ome 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;
}
Run Code Online (Sandbox Code Playgroud)

这对父VC没有任何作用.实际上,如果父对象是navigationController的RootViewController,则根本就没有后退按钮.但是孩子将继承(或拿起)你创建的后退按钮.

这仅适用于直接子VC,因此如果要通过navigationController的堆栈维护标签,则需要在每个父级上设置它.

感谢#iphonedev中的@wiliz向我解释这个问题.