2012-04-04 5 views
3

Um etwas Hintergrund zu geben, mache ich eine UINavigationControlled-basierte Blog-App (ich nehme an, es ähnelt am ehesten der iPhone Facebook App). Unabhängig von der derzeit aktiven Ansicht zeigt die Navigationsleiste einige Schaltflächen im Titelbereich an, z. B. Freundschaftsanfragen und Aktivitätsbenachrichtigungen. Ähnlich wie die Facebook-App wird durch Klicken auf diese Schaltflächen eine Popup-Ansicht erstellt.Hinzufügen von Schaltflächen zur Titelansicht von NavigationBar, ohne Code wiederholen zu müssen

Momentan mache ich Dinge auf eine Weise, die ich unglaublich uneffizient finde. Für jede geladene Ansicht erstelle ich die Schaltflächen neu und füge sie der Navigationsleiste hinzu. Mein Code ist unten:

//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]; 

Da meine App mehrere Ansichten und die Navigationsleiste hat immer sichtbar ist, ist es dumm scheint auf neu zu erstellen um die Tasten zu halten, um sie zu einem Behälter Ansicht Hinzufügen dann fügte hinzu, dass im Hinblick auf den Titleview der Navigationssteuerung.

Was wäre ein besserer Weg, um den gleichen Effekt zu erzielen? Ich habe nach Unterklassen gesucht oder eine Kategorie für UINavigationBar erstellt und dort möglicherweise den Code für die Containeransicht hinzugefügt. Allerdings wusste ich nicht, wie man die Selektoren in diesen Fällen arbeiten lässt. Ich war auch nicht sicher, wie man Zugang zur Eigenschaft titleView mit einer UINavigationBar Kategorie erhält.

Jede Hilfe zu diesem Thema wäre großartig! Vielen Dank!

Antwort

2

Ich würde empfehlen, den obigen Code in eine UIViewController Kategorie (oder eine UIViewController Unterklasse, wenn Sie alle Ihre View-Controller von einem einzigen Stamm subclass). Dann in viewDidAppear, rufen Sie einfach den obigen Code (oder setzen Sie das in der Superklasse viewDidAppear). Ich denke, dass Subclassing UINavigationBar mehr Ärger sein wird als es wert ist.

Wenn Sie wirklich vermeiden wollen, die Schaltflächen neu zu erstellen (wahrscheinlich kein Grund, dies zu tun, aber wenn es Ihnen aus irgendeinem Grund wichtig ist), können Sie die Schaltflächen an ein Singleton-Objekt anschließen, anstatt sie auf self zu richten. Der Singleton kann entweder die Antwort direkt verarbeiten, die Nachricht an den aktiven Ansichtscontroller weiterleiten oder eine Benachrichtigung veröffentlichen, auf die der aktive Ansichtscontroller warten kann.

+0

Vielen Dank, so eine einfache Lösung. Ich wusste, dass ich falsch liege! – kurisukun

Verwandte Themen