Похоже, вы используете навигацию с помощью клавиатуры для переключения между кнопками и активации выбранной. В этом случае клавиша возврата обычно соответствует нажатию выбранной кнопки. Однако, поскольку вы назначили Return как ярлык для одной или нескольких кнопок, цепочка респондента ищет и находит кнопку с соответствующим эквивалентом ключа, поэтому вместо нее отправляется сообщение этой кнопки.
Попробуйте очистить эквивалент ключа для всех трех кнопок. Я думаю, что это даст поведение, которое вы ищете.
Если вы не используете навигацию с помощью клавиатуры, неясно, почему кнопка вкладки имеет какой-либо эффект. Тем не менее, если вы пытаетесь сделать что-то вроде цикла кнопок по умолчанию от одной кнопки к другой, вам нужно будет менять эквивалент клавиатуры при каждом нажатии кнопки. Как правило, я бы не советовал - я не думаю, что пользователи хотели бы, чтобы кнопка по умолчанию менялась с одного момента на другой. Если вам нужно, вот код:
- (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 соответственно. Идея заключается в том, что когда выбрана кнопка по умолчанию (т. Е. Кнопка с ключом возврата в качестве ее эквивалента), она устанавливает ключ следующей кнопки, эквивалентный Return, и устанавливает свой собственный эквивалент ничем.
Очевидно, что вы можете изменить способ работы кода - например, вы можете захотеть, чтобы каждая кнопка вызывала свое действие. В этом случае просто заставьте каждое действие вызывать общий метод, который выполняет ту же работу, что и приведенный выше код.
Урок здесь заключается в том, что если вы установите одинаковый эквивалент клавиш для нескольких кнопок, первая найденная будет «нажата». Если вы хотите изменить эквивалент ключа, вам нужно изменить набор эквивалентов для различных кнопок.