Вопрос по uinavigationbar, iphone – Добавление кнопок в заголовок панели навигации без необходимости повторять код

3

Чтобы подвести итог, я делаю приложение типа блога на основе UINavigationControlled (я полагаю, оно наиболее близко напоминает приложение для iPhone на Facebook). Независимо от того, какое представление активно в данный момент, панель навигации отображает некоторые кнопки в области заголовка, такие как запросы друзей и уведомления об активности. Во многом то же самое, что и в приложении 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 и, возможно, добавил туда код представления контейнера. Однако я не знал, как заставить селекторы работать в этих случаях. Я также не был уверен, как получить доступ к свойству titleView с категорией UINavigationBar.

Любая помощь в этом была бы отличной! Спасибо!

Ваш Ответ

1   ответ
2

UIViewController категория (илиUIViewController подкласс, если вы можете создать подкласс всех своих контроллеров представления из одного корня). Затем вviewDidAppearпросто вызовите приведенный выше код (или поместите его в суперклассviewDidAppear). Я думаю, что подклассUINavigationBar будет больше проблем, чем стоит.

Если вы действительно хотите избежать повторного создания кнопок (вероятно, нет причин делать это, но если это важно для вас по какой-то причине), вы можете привязать кнопки к какому-то одноэлементному объекту, а не указывать ихself, Синглтон может либо обработать ответ напрямую, переслать сообщение активному контроллеру представления, либо опубликовать уведомление, которое может прослушивать активный контроллер представления.

Error: User Rate Limit Exceeded kurisukun

Похожие вопросы