Xcode 初始化UINavigationItem的习惯用法
既然Xcode 初始化UINavigationItem的习惯用法,xcode,interface-builder,xib,uinavigationitem,Xcode,Interface Builder,Xib,Uinavigationitem,既然UIViewControllernavigationItem outlets已被弃用(是的,我有点落后),那么指定UINavigationItem元素的正确习惯用法是什么 我已经看到了几种建议的方法,但没有一种对我来说是完全清楚的: 在视图控制器的XIB中“在视图控制器中嵌入导航项” 使用从头开始的值在代码中初始化导航项的属性 在视图控制器中为导航控制器创建出口,在视图控制器的XIB中连接导航项,并使用其属性在代码中初始化(实际)导航项的属性 对我来说,如何“嵌入”导航项(简单地将其作为视图
UIViewController
navigationItem outlets已被弃用(是的,我有点落后),那么指定UINavigationItem
元素的正确习惯用法是什么
我已经看到了几种建议的方法,但没有一种对我来说是完全清楚的:
UINavigationItem
放在它上面并调整这个项目-它会工作的。例如,当您在XIB中定义uinavigationcontroller
时,您可以将一些控制器作为根视图控制器放在其中。因此,您可以在XIB中为该控制器设置UINavigationItem
2) 如果控制器从XIB加载它的视图(它是由alloc
和init
或initWithNibName:bundle:
)创建的),它在XIB中仅显示为文件的所有者
,不支持UINavigationItem
。在这种情况下,您应该在代码中配置导航项(我通常在viewDidLoad
中进行配置)。不需要创建它,它已经存在于控制器的navigtionItem
属性中
self.navigationItem.title = @"Price List";
也许这是可能的,使出口的导航项目,但我不推荐这个。苹果宣布这类产品过时是有原因的。我记得有一天和同事讨论过这个问题,但我忘了它是什么(当时很明显)。在我们的项目中,我们要求尽可能从IB定制UI。 因此,我将UINavigationItem添加到xib中,对其进行配置,将其作为出口链接到自定义UIViewController子类,然后在运行时使用category将方法复制所有属性添加到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。因此,如果我正确理解1:如果我要附加
UINavigationItem
的控制器是XIB中另一个实体的子实体(例如UINavigationController
),则我可以“嵌入”UINavigationItem
作为子项,它将正常工作。但是,如果控制器是XIB的所有者,则无法在XIB中附加UINavigationItem
。如果是这样,那就很奇怪了,因为这意味着虽然您可以使用IB为导航控制器中的初始视图指定一个UINavigationItem
,但其余的都必须在代码中指定。谢谢!我也有同样的要求,我采用了你的方法。它起作用了。