Я обновляю старый код и, чтобы освободить место на панели инструментов, конвертирую тестовые кнопки в изображения. Вот пример нового и старого кода в loadView:
// New code, doesn't work.
UIButton *toggleKeyboardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
toggleKeyboardBtn.bounds = CGRectMake( 0, 0, showKeyboardImage.size.width, showKeyboardImage.size.height );
[toggleKeyboardBtn setImage:showKeyboardImage forState:UIControlStateNormal];
UIBarButtonItem *toggleKeyboardItem = [[UIBarButtonItem alloc] initWithCustomView:toggleKeyboardBtn];
[toggleKeyboardItem setTarget:self];
[toggleKeyboardItem setAction:@selector(toggleKeyboard:)];
// Original code, works jut fine.
UIBarButtonItem *setupItem = [[[UIBarButtonItem alloc] initWithTitle:@"Setup" style:UIBarButtonItemStyleBordered target:[UIApplication sharedApplication].delegate action:@selector(showSetupView:)] autorelease];
Мой новый код скопирован из Cannot set action on UIBarButtonItem , и я вполне уверен, что не совершаю их ошибку, поскольку моя текстовая кнопка работает нормально.
showSetupView ()находится в моем файле AppController.m, и экран настройки появляется и исчезает при нажатии кнопки.
toggleKeyboard (), OTOH, находится в том же файле, что и подпрограмма loadView (), и в настоящее время состоит из этого кода:
//- (void)toggleKeyboard {
- (IBAction)toggleKeyboard:(id)sender {
NSLog(@"Entering toggleKeyboard()...");
hiddenKeyboard = !hiddenKeyboard;
[self prepareToolbarsAndStatusbar];
}
Само собой разумеется, хотя я вижу анимацию нажатия кнопки -, я никогда не вижу сообщения NSLog. И последнее наблюдение, сделанное случайно. Изменение селектора setAction на это:
[toggleKeyboardItem setAction:@selector(noSuchRoutine:)];
компилируется корректно, что, возможно, указывает на то, что имя моей подпрограммы по какой-то причине игнорируется.
У кого-нибудь есть идеи? Спасибо.