UINavigationBar правая кнопка не отображается - PullRequest
5 голосов
/ 06 апреля 2011

Я использую следующую функцию через уведомление, чтобы загрузить правую кнопку на моем UINavigationBar, и хотя я могу отследить кнопку и убедиться, что она выделена, она не отображается ... какие-либо идеи?

РЕДАКТИРОВАТЬ 06.04.2011, 14:42

Итак, что-то интересное ... ширина всегда сообщается как 0.0 ...

- (void)showRightBarButton:(id)sender
{
    NSLog(@"Showing button");
    UIBarButtonItem *button = [[UIBarButtonItem alloc]
                               initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                               target:self
                               action:@selector(showPI:)];
    [button setTitle:@"This Button"];
    self.navigationItem.rightBarButtonItem = button;
    //[[self.navigationItem rightBarButtonItem] setWidth:50];
    NSLog(@"Button width is %f.", self.navigationItem.rightBarButtonItem.width);
    [button release];
}

Ответы [ 2 ]

4 голосов
/ 06 апреля 2011
[self.view setNeedsDisplay];

Ты прав. Эта линия не нужна. Что касается остальной части кода, я не вижу, что с ним не так. Единственное, что я до сих пор придумал, это то, что self не является отображаемым в данный момент контроллером представления или что вам не хватает контроллера навигации. Возможно, вы создали UINavigationBar самостоятельно, а не с помощью контроллера навигации?

В любом случае, для упрощения отладки я бы предложил следующее:

- (void)showRightBarButton:(id)sender
{
    NSLog(@"Showing button");
    UIBarButtonItem *button = [[UIBarButtonItem alloc]
                             initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                                  target:self
                                                  action:@selector(showPI:)];
    self.navigationItem.rightBarButtonItem = button;
    [button release];
}

РЕДАКТИРОВАТЬ: Ширина не интересна. Это всегда 0.0, если вы не укажете это сами

Проблема в том, что вы добавляете кнопку не в том месте. Вы не должны добавлять кнопку к элементу навигации контроллера навигации, но к элементу навигации контроллера, который в данный момент отображается контроллером навигации.

0 голосов
/ 06 апреля 2011

Вы говорите, что используете NSNotification, чтобы вызвать добавление элемента кнопки панели. Где вы регистрируетесь для уведомления? Возможно ли, что уведомление будет получено до загрузки вашего просмотра?

Если вы регистрируетесь для уведомлений в -init, вы можете установить на контроллере представления флаг, что вам следует отображать элемент панели кнопок, а затем ссылаться на этот флаг в -viewDidLoad, чтобы при желании отобразить его.

Или вы можете просто зарегистрироваться для получения уведомления в -viewDidLoad.

...