У меня возникают трудности с настройкой табуляции для моих NSTextField
.Пытается установить `setNextKeyView` на` NSTextField `в коде
В моей AppDelegate
добавить NSViewController
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
CustomViewController *vc = [[CustomViewController alloc] init];
[_window.contentView addSubview:vc.view];
[_window setAutorecalculatesKeyViewLoop:NO];
[_window.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@{@"view":vc.view}]];
[_window.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@{@"view":vc.view}]];
}
Тогда в моем NSViewController
добавить заказные NSViews
, которые содержат метку и текстовое поле.
- (void)viewDidLoad {
_customView = [[CustomView alloc] initWithLabel:@"Foo"];
[self.view addSubview_customView];
_customView1 = [[CustomView alloc] initWithLabel:@"Bar"];
[self.view addSubview_customView1];
_customView2 = [[CustomView alloc] initWithLabel:@"FooBar"];
[self.view addSubview_customView2];
}
И, наконец, у меня есть CustomView, который реализует поле метки и текст следующим образом:
- (void)initWithLabel:(NSString *)label {
self = [super initWithFrame:NSZeroRect];
if (self) {
_label = [[NSTextField alloc] initWithFrame:NSZeroRect];
_label.stringValue = label;
_label.font = [NSFont fontWithName:@"HelveticaNeue-Light" size:12.0f];
_label.alignment = NSLeftTextAlignment;
_label.textColor = [NSColor grayColor];
_label.selectable = NO;
_label.editable = NO;
_label.drawsBackground = NO;
_label.bezeled = NO;
[self addSubview:_label];
_textField = [[NSTextField alloc] initWithFrame:NSZeroRect];
_textField.stringValue = @"";
_textField.alignment = NSRightTextAlignment;
_textField.font = [NSFont fontWithName:@"HelveticaNeue-Light" size:32.0f];
[self addSubview:_textField];
}
return self;
}
я позиционирование с NSLayoutConstraints
и все выглядит отлично и работает, как и ожидалось, за исключением того, когда я пытаюсь реализовать setNextKeyView:
.
Я пытался сделать это с помощью открытой textField
в viewDidLoad
контроллера вида, как:
...
[_customView.textField setNextKeyView:_customView1.textField];
[_customView1.textField setNextKeyView:_customView3.textField];
[_customView2.textField setNextKeyView:_customView.textField];
...
Но это не сработало. При нажатии клавиши табуляции от NSTextField
текущее поле теряет фокус, но следующий не получает его. Я также попытался позвонить [[[self view] window] recalculateKeyViewLoop]
, но это тоже не помогло.
Как мне это сделать? Я также играл с настройкой NSWindow
setAutorecalculatesKeyViewLoop:
до YES
, но это также не отразило эффект.
Благодаря
PS: это псевдо-код, чтобы упростить вещи. Если скобка отсутствует или есть опечатка, то это не моя проблема. Он отлично компилируется и работает. Просто табуляция не ведет себя так, как ожидалось. ;-)
Если вы нажмете Tab еще, делает акцент в конце концов добраться до других текстовых полей? Кроме того, вы должны использовать '-initWithFrame:' для инициализации суперкласса и 'NSTextField'. Я понимаю, что вы используете автоматическую компоновку, поэтому кадр будет переопределен, но он все еще является назначенным инициализатором. Вы можете передать 'NSZeroRect'. –
Нет, он никогда не попадает в другие поля. Я изменил init на NSZeroRect. – Joseph
Вы не изменили его для вызова '[super init]', по крайней мере, не в отредактированном коде. –