2012-04-04 8 views
3

背景を分けて、私はUINavigationControlledベースのブログタイプのアプリを作っています(私はiPhoneのFacebookブックアプリに最も似ていると思います)。現在アクティブなビューに関係なく、NavigationBarは、フレンドリクエストやアクティビティ通知などのタイトルエリアにいくつかのボタンを表示します。 Facebookのアプリと同じように、これらのボタンをクリックするとポップアップビューが作成されます。コードを繰り返さずにNavigationBarのタイトルビューにボタンを追加する

現在、私は信じられないほど効率が悪いと感じるようなことをしています。ロードされているすべてのビューについて、ボタンを作り直してナビゲーションバーに追加しています。私のコードは以下の通りです:

//Setup the custom middle buttons 
UIView *container = [[UIView alloc] init]; 
container.frame = CGRectMake(0, 0, 80, 44); 

// create a button and add it to the container 
UIButton *notificationButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
notificationButton.frame = CGRectMake(0, 0, 35, 44); 
[notificationButton addTarget:self 
         action:@selector(showNotifications:) 
      forControlEvents:UIControlEventTouchUpInside]; 
[container addSubview:notificationButton]; 


// add another button to the container 
UIButton *friendActivityButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
friendActivityButton.frame = CGRectMake(45, 0, 35, 44); 
[friendActivityButton addTarget:self 
         action:@selector(showFriendActivity:) 
       forControlEvents:UIControlEventTouchUpInside]; 
[container addSubview:friendActivityButton]; 

// Set the titleView to the container view 
[self.navigationItem setTitleView:container]; 
[container release]; 

私のアプリは、複数のビューを持っており、ナビゲーションバーが常に表示されますので、その後、titleViewにそのビューを追加し、コンテナビューに追加し、ボタンを再作成に保つために愚かなようですナビゲーションコントローラの

同じ効果を達成するにはどうすればよいでしょうか?私はサブクラス化やUINavigationBarのカテゴリを作成してコンテナビューのコードを追加していました。しかし、私はこれらの場合セレクタを動作させる方法を知らなかった。 UINavigationBarカテゴリでtitleViewプロパティにアクセスする方法もわかりませんでした。

これについての助けがあれば助かります!ありがとうございました!

答えて

2

上記のコードをUIViewControllerカテゴリ(またはすべてのビューコントローラを1つのルートからサブクラス化できる場合はUIViewControllerサブクラス)に配置することをお勧めします。次にviewDidAppearで、上記のコードを呼び出すだけです(またはスーパークラスのviewDidAppearに入れてください)。私はUINavigationBarをサブクラス化することは、それが価値があるよりも問題になると思います。

ボタンを再作成するのを避けたいのであれば(理由はないかもしれませんが何らかの理由であなたにとって重要な場合)、selfを指すのではなく、シングルトンオブジェクトにボタンを配線できます。シングルトンは、応答を直接処理するか、メッセージをアクティブなビューコントローラに転送するか、アクティブなビューコントローラがリッスンできることを通知することができます。

+0

ありがとう、そのような簡単な解決策。私はそれについて間違っていることを知っていた! – kurisukun

関連する問題