4

NavigationItemアウトレットは非推奨になっているためUIViewController(はい、少し遅れています)、?の要素を指定する正しいイディオムは何UINavigationItemですか?

私はいくつかのアプローチが提案されているのを見てきましたが、どれも私には完全に明確ではありません:

  1. ビューコントローラのXIBの「ビューコントローラにナビゲーションアイテムを埋め込む」。

  2. from-scratch値を使用して、ナビゲーションアイテムのプロパティをコードで初期化します。

  3. ビューコントローラーでナビゲーションコントローラーのアウトレットを作成し、ビューコントローラーのXIBでナビゲーションアイテムを配線し、そのプロパティを使用して(実際の)ナビゲーションアイテムのプロパティをコードで初期化します。

ナビゲーションアイテムを「埋め込む」方法がわかりません(IBにView Controllerの子として追加するだけでは効果がありません)。そして、これらのアプローチのどちらが優れているのか、さらに言えば、どこで(どの方法で)2または3を実行するのかは私にはわかりません。

4

2 に答える 2

7

1)コントローラーがXIBで作成さUINavigationItemれている場合は、コントローラーをドロップしてこのアイテムを微調整できます。これで機能します。たとえばUINavigationControler、XIBで定義している場合、ルートビューコントローラーとしてコントローラーを内部に配置できます。したがってUINavigationItem、XIBでこのコントローラーを使用できます。

2)コントローラーがXIBからビューをロードする場合(それは、によって作成されallocinitまたはinitWithNibName:bundle:)XIBでのみ、File's Ownerサポートされていないものとして表示されUINavigationItemます。この場合、ナビゲーション項目をコードで構成する必要があります(私はviewDidLoad通常それを行います)。それを作成する必要はありません、それnavigtionItemはあなたのコントローラーのプロパティにすでにあります

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

ナビゲーションアイテムのアウトレットを作ることは可能かもしれませんが、私はこれをお勧めしません。Appleは、そのようなコンセントが廃止されたと宣言したのには理由があります。ある日、同僚と話し合ったことを覚えていますが、それが何であったかを忘れてしまいました(当時は明らかでした)。

于 2011-03-13T10:01:54.943 に答える
1

私たちのプロジェクトでは、UIを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にリンクすることもできます。

于 2011-05-10T17:31:43.590 に答える