通过按Tab键或单击外部,从一组NSTextFields中删除第一响应者

时间:2014-06-20 00:17:51

标签: xcode macos nstextfield

我正在Xcode中为MacOSX开发应用程序

enter image description here

这是一个屏幕,其中包含一组NSTextFields可选择并可编辑所有这些

每次按Tab键时,都会按顺序从NSTextField更改为NSTextField ...

现在我想通过点击任何NSTextField的外部删除textfield的第一响应者,或者当我转到NSWindowController的最后NSTextField时,我们称之为 descripcionBitacoraTextField

据我所知,这是一种名为

的方法
- (void)controlTextDidEndEditing:(NSNotification *)aNotification

我在那里添加了下一个代码

- (void)controlTextDidEndEditing:(NSNotification *)aNotification{
    NSTextField *textField = (NSTextField *)[aNotification object];


    if (textField == self.descripcionBitacoraTextField) {
        [[textField window] makeFirstResponder:nil];
    }
}

当我完成编辑任何textField时触发,但是当我按Tab键完成最后一个NSTextField时,它开始将我的第一个NSTextField像无尽的转盘一样聚焦

1 个答案:

答案 0 :(得分:1)

点击外面:

-(void)mouseDown:(NSEvent *)event {
    [self.window makeFirstResponder:nil];
}

如果您想在退出NSTextField时退出,则可以:

-(BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector{

    NSTextField *textField = (NSTextField *) control;

    if (commandSelector == @selector(insertTab:) && (textField == self.descripcionBitacoraTextField)) {
        [self.window makeFirstResponder:[[textView window]nextResponder]];
        return YES;
    }
    else if (commandSelector == @selector(insertTab:)){
        [self.window makeFirstResponder:[self.contentView viewWithTag:(textField.tag +1)]];
        return YES;
    }
    return NO;
}