UIBarButtonItem, созданный с использованием initWithCustomView, не запускает действие

Я обновляю старый код и, чтобы освободить место на панели инструментов, конвертирую тестовые кнопки в изображения. Вот пример нового и старого кода в 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:)];

компилируется корректно, что, возможно, указывает на то, что имя моей подпрограммы по какой-то причине игнорируется.

У кого-нибудь есть идеи? Спасибо.

8
задан Community 23 May 2017 в 12:02
поделиться