[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, если вы не укажете это сами
Проблема в том, что вы добавляете кнопку не в том месте. Вы не должны добавлять кнопку к элементу навигации контроллера навигации, но к элементу навигации контроллера, который в данный момент отображается контроллером навигации.