由于不推荐使用UIViewController
navigationItem出口(是的,我有点落后),指定UINavigationItem
的元素的正确用法是什么?
我已经看到了几种方法,但没有一种方法对我来说完全清楚:
“在视图控制器的XIB中嵌入导航项”。
使用from-scratch值在代码中初始化导航项的属性。
在视图控制器中为导航控制器创建一个插座,在视图控制器的XIB中连接一个导航项,并使用其属性在代码中初始化(实际)导航项的属性。
< / LI> 醇>It isn't clear告诉我如何“嵌入”导航项目(简单地将其添加为IB中视图控制器的子项无效);并且我不清楚哪种方法更好,或者就此而言,在哪里(以什么方法)做2或3。
答案 0 :(得分:7)
1)如果控制器在XIB中创建,您可以在其上删除UINavigationItem
并调整此项目 - 它将起作用。例如,当您在XIB中定义UINavigationControler
时,您可以将一些控制器放在根视图控制器中。因此,您可以在XIB中为此控制器设置UINavigationItem
。
2)如果控制器从XIB加载它的视图(它由alloc
创建,然后由init
或initWithNibName:bundle:
创建)它在XIB中仅显示为{ {1}}不支持File's Owner
。在这种情况下,您应该在代码中配置导航项(我通常在UINavigationItem
中执行)。没有必要创建它,它已经存在于控制器的viewDidLoad
属性中
navigtionItem
也许可以为导航项目制作插座,但我不建议这样做。苹果公司宣称这样的出口已经过时了。我记得有一天我和同事一起讨论过这个问题,但我忘了它是什么(当时很明显)。
答案 1 :(得分:1)
在我们的项目中,我们要求尽可能使用户界面可以自定义UI。 因此,我将UINavigationItem添加到xib,配置它,将其作为插件链接到我的自定义UIViewController子类,然后在运行时使用添加到UIViewController的方法使用类别复制所有属性:
- (void)setNavigationItemPropertiesFromOtherItem:(UINavigationItem *)navItem
{
// WORKAROUND: we can't link UINavigationItem to UIViewController from IB, and navigationItem property in UIViewController is readonly
self.navigationItem.title = navItem.title;
self.navigationItem.prompt = navItem.prompt;
self.navigationItem.hidesBackButton = navItem.hidesBackButton;
if (navItem.backBarButtonItem != nil)
{
self.navigationItem.backBarButtonItem = navItem.backBarButtonItem;
}
if (navItem.leftBarButtonItem != nil)
{
self.navigationItem.leftBarButtonItem = navItem.leftBarButtonItem;
}
if (navItem.rightBarButtonItem != nil)
{
self.navigationItem.rightBarButtonItem = navItem.rightBarButtonItem;
}
if (navItem.titleView != nil)
{
self.navigationItem.titleView = navItem.titleView;
}
}
此解决方法还允许使用IB将条形按钮项链接到UINavigationItem。