Добавление левой кнопки в UINavigationBar (iPhone)

Я создал новое приложение для iPhone, основанное на навигации. Я добавил это в RootViewController.

- (void)viewDidLoad {
    [super viewDidLoad];
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] init];
self.navigationItem.leftBarButtonItem = addButton;
self.navigationItem.leftBarButtonItem.enabled = YES;
}

Однако левая кнопка не отображается. Есть ли что-то, что мне нужно сделать?


person 4thSpace    schedule 19.02.2009    source источник


Ответы (3)


Вы не определяете, что на самом деле делает кнопка. Это строка из моего приложения:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelEdit:)];

cancelEdit:, селектор, находится в текущем классе (self) и определяется как:

- (void) cancelEdit: (id) sender;
person Stephen Darlington    schedule 19.02.2009
comment
Потрясающе, спасибо. Где вы найдете различные доступные селекторы? Документ очень расплывчато об этом. Я определил метод экземпляра и поместил его в качестве селектора, но он так и не был выполнен. Я хотел бы скользить в подробном представлении при нажатии кнопки. - person 4thSpace; 19.02.2009
comment
Селектор определен в классе (я добавил это в свой ответ). - person Stephen Darlington; 19.02.2009
comment
Я также узнал, как это сделать через IB. Он добавляется как элемент навигации, но не через RootViewController.xib, где находится табличное представление. Его нужно добавить в MainWindow.xib. - person 4thSpace; 20.02.2009
comment
Отсутствует автоматическое освобождение для устранения существующей утечки памяти: self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelEdit:)] autorelease]; - person vfn; 19.07.2010

На самом деле есть еще один ответ, который здесь не указан, но может быть очень полезен во многих случаях. Если вы не хотите использовать UINavigationController, то self.navigationItem вам не вариант.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"imageName"] style:UIBarButtonItemStyleBordered target:self action:@selector(action:)];
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Bar Title"];
navigationItem.leftBarButtonItem = barButton;
[navigationBar pushNavigationItem:navigationItem animated:NO];

Это может понадобиться при создании легковесного UIViewController с панелью и кнопками, но вам не нужны накладные расходы на навигацию.

person Roman B.    schedule 07.10.2012

По этому вопросу:

Отлично, спасибо. Где вы найдете различные доступные селекторы? Документ очень расплывчато об этом. Я определил метод экземпляра и поместил его в качестве селектора, но он так и не был выполнен. Я хотел бы скользить в подробном представлении при нажатии кнопки. – 4thSpace 19 фев в 16:19

Я иду туда, где мне нужна дополнительная информация, и нажимаю клавишу выхода (Esc). Итак, в этом примере:

...(beginning of line)... @selector(Place Cursor Here, press Esc) ...

Появится список доступных селекторов. Для программистов Microsoft это похоже на Intellisense, но вы должны запрашивать его с помощью Esc (он просто не появляется автоматически, как в Visual Studio). Практически говоря, XCode создает большую часть того, что вы пытаетесь создать, когда начинаете печатать, и это действительно помогает, когда вы понимаете, что клавиша Tab — ваш друг. (ну... это мой друг... такая же одинокая жизнь, как и я)

Теперь, если вам нужен собственный селектор, вы можете поместить туда свою метку (например, mySelector), а затем в коде создать ее:

- (IBAction)mySelector:(id)sender {
NSLog(@"You touched me THERE!");
}

Также в заголовочном (.h) файле обязательно поместите соответствующий:

-(IBAction) mySelector:(id)sender;

person inked    schedule 06.09.2009
comment
Спасибо за подсказку с ключом выхода! Я думал об этом. :) - person Helephant; 23.01.2010
comment
Кстати, Control-запятая представит список, который вы можете прокручивать. - person mobibob; 13.02.2010
comment
Неважно - я только что попробовал ESC, и это то же самое, что и моя контрольная запятая, и намного легче быстро нажать! Ваш комментарий лучше... :) - person mobibob; 13.02.2010