背景を説明するために、私はUINavigationControlledベースのブログタイプのアプリを作成しています(iPhoneのFacebookアプリに最もよく似ていると思います)。現在アクティブなビューに関係なく、NavigationBarのタイトル領域には、友達リクエストやアクティビティ通知などのボタンがいくつか表示されます。Facebookアプリとほぼ同じように、これらのボタンをクリックするとポップアップビューが作成されます。
現在、私は信じられないほど非効率的だと感じる方法で物事を行っています。ロードされるすべてのビューについて、ボタンを再作成してナビゲーションバーに追加しています。私のコードは以下の通りです:
//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プロパティにアクセスする方法もわかりませんでした。
これに関するどんな助けも素晴らしいでしょう!ありがとうございました!