初始化 UINavigationItem 的成语

Posted

技术标签:

【中文标题】初始化 UINavigationItem 的成语【英文标题】:Idiom for Initializing UINavigationItem 【发布时间】:2011-03-13 03:45:37 【问题描述】:

由于UIViewController navigationItem 出口已被弃用(是的,我有点落后),指定UINavigationItem 的元素的正确成语是什么?

我看到了几种建议的方法,但没有一个对我来说是完全清楚的:

    “在视图控制器中嵌入导航项”在视图控制器的 XIB 中。

    在代码中使用从头开始的值初始化导航项的属性。

    在视图控制器中为导航控制器创建一个出口,在视图控制器的 XIB 中连接一个导航项,并使用其属性在代码中初始化(实际)导航项的属性。

It isn't clear 告诉我如何“嵌入”导航项(只需将其添加为 IB 中视图控制器的子项无效);我不清楚这些方法中哪一种更好,或者,就此而言,在哪里(以什么方法)做 2 或 3。

【问题讨论】:

【参考方案1】:

1) 如果控制器是在 XIB 中创建,您可以将 UINavigationItem 放在上面并调整此项目 - 它会起作用。例如,当您在 XIB 中定义 UINavigationControler 时,您可以将一些控制器作为根视图控制器放入其中。所以你可以在 XIB 中为这个控制器设置UINavigationItem

2) 如果控制器 从 XIB 加载它的视图(它由 alloc 创建,然后由 initinitWithNibName:bundle: 创建)它在 XIB 中仅显示为 File's Owner支持UINavigationItem。在这种情况下,您应该在代码中配置导航项(我通常在 viewDidLoad 中进行配置)。无需创建它,它已经存在于控制器的navigtionItem 属性中

self.navigationItem.title = @"Price List";

也许可以为导航项制作插座,但我不推荐这样做。苹果宣布这种插座已经过时是有原因的。我记得有一天和同事讨论过这个问题,但我忘记了它是什么(当时很明显)。

【讨论】:

所以,如果我理解正确 1:如果我想附加 UINavigationItem 的控制器是 XIB 中另一个实体的子节点(例如 UINavigationController),那么我可以“嵌入“UINavigationItem 小时候,它会起作用。 但是,如果控制器是 XIB 的所有者,则无法在 XIB 中附加UINavigationItem。如果是这样,那很奇怪,因为这意味着虽然您可以使用 IB 为导航控制器中的初始视图指定 UINavigationItem,但所有其余部分都必须在代码中指定。【参考方案2】:

在我们的项目中,我们要求用户界面尽可能地从 IB 进行定制。 因此,我将 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。

【讨论】:

谢谢!我有同样的要求,我采用了你的方法。它有效。

以上是关于初始化 UINavigationItem 的成语的主要内容,如果未能解决你的问题,请参考以下文章

C++中用于对象构造的**成语

python成语接龙小游戏

汉语-成语:勤勤恳恳

使用 Kitten 开发一款趣味成语接龙游戏

Html5 Egret游戏开发 成语大挑战游戏逻辑和数据处理

成语接龙(英语单词链)