Похоже, вы используете навигацию с помощью клавиатуры для переключения между кнопками и активации выбранной. В этом случае клавиша возврата обычно соответствует нажатию выбранной кнопки. Однако, поскольку вы назначили «Возврат» в качестве сочетания клавиш для одной или нескольких кнопок, цепочка ответчика ищет и находит кнопку с соответствующим эквивалентом ключа, поэтому вместо нее отправляется сообщение этой кнопки.
Попробуйте очистить эквивалент ключа для всех трех ваших кнопок. Я думаю, что это даст поведение, которое вы ищете.
Если вы не используете навигацию с помощью клавиатуры, непонятно, почему кнопка табуляции имеет какой-либо эффект. Тем не менее, если вы пытаетесь сделать что-то вроде циклического переключения кнопки по умолчанию с одной кнопки на другую, вам придется менять эквивалент клавиатуры при каждом нажатии кнопки. Я бы не рекомендовал это в целом — я не думаю, что пользователи хотели бы, чтобы кнопка по умолчанию менялась от одного момента к другому. Если вам нужно, вот код:
- (IBAction)nextButton:(NSButton*)sender
{
int tag = [sender tag];
NSView *superview = [sender superview];
if ([sender.keyEquivalent isEqualToString:@"\r"]) {
NSButton *nextButton = [superview viewWithTag:(tag % 3) + 1];
nextButton.keyEquivalent = @"\r";
sender.keyEquivalent = @"";
}
}
Это предполагает, что у вас есть три кнопки, и каждая из них настроена на метод nextButton:
в качестве действия. Кроме того, кнопки имеют теги 1, 2 и 3 соответственно. Идея здесь заключается в том, что когда выбрана кнопка по умолчанию (т. е. та, у которой клавиша возврата является ее эквивалентом), она устанавливает клавишу следующей кнопки, эквивалентную «Возврату», и устанавливает свой собственный эквивалент равным нулю.
Очевидно, вы можете изменить способ работы кода — например, вы можете захотеть, чтобы каждая кнопка вызывала другое действие. В этом случае просто сделайте так, чтобы каждое действие вызывало общий метод, который выполняет ту же работу, что и приведенный выше код.
Урок здесь заключается в том, что если вы установите один и тот же эквивалент клавиши для нескольких кнопок, первая найденная будет «нажата». Если вы хотите изменить эквивалент клавиши, вам нужно изменить эквивалентный набор для различных кнопок.
person
Caleb
schedule
26.03.2012