Когда пользователь добавляет новый управляемый объект, он отображается в таблице, которая прокручивается до новой записи, а имя нового объекта (значение по умолчанию) переходит в режим редактирования.
Мне нужно проверить, уникально ли имя нового объекта в хранилище данных, поэтому я не могу использовать для этого средство форматирования. Я думаю, что идеальный момент, когда я должен проверить это, — это всякий раз, когда пользователь пытается зафиксировать значение имени записи, используя textShouldEndEditing:
.
Я создал подкласс NSTableView
и переопределил следующие методы, просто чтобы иметь возможность проверять в журнале, вызываются ли они.
- (BOOL)textShouldEndEditing:(NSText *)textObject {
NSLog(@"textSHOULDendEditing fired in MyTableView");
return [super textShouldEndEditing:textObject];
}
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
NSLog(@"control:textShouldEndEditing fired in MyTableView");
return YES;
}
- (void)textDidEndEditing:(NSNotification *)aNotification {
NSLog(@"textDIDEndEditing fired in MyTableView");
}
textDidEndEditing:
вызывается нормально, а textShouldEndEditing:
нет.
В Справочнике по классу NSTableView в разделе Text Delegate Methods перечислены оба метода textShouldEndEditing:
и textDidEndEditing:
. Кто-нибудь, объясните, почему одному звонят, а другому нет.
Я думаю, что NSTableView
действует как делегат для NSTextField
, который создается как делегат черный ящик для NSTextFieldCell
. Итак, что называется методами делегата в Справочник по классу NSTableView фактически реализуют методы управления текстом для объекта NSTextField
.
Я попытался объявить NSTextFieldCell
выходом в моем NSTableView
. Я также пытался объявить несколько протоколов в файле NSTableView
.
#import <AppKit/AppKit.h>
#import <Cocoa/Cocoa.h>
@interface MyTableView : NSTableView <NSTextDelegate, NSTextFieldDelegate, NSControlTextEditingDelegate, NSTableViewDelegate, NSTableViewDataSource> {
}
@end
Не смейтесь, я даже пытался объявить свое табличное представление отдельным делегатом: P
<NSTextDelegate>
, который нужно реализовать? Кто-нибудь знает, как пересылаютсяNSTextDelegate
методыNSTextFieldCell
? Есть ли какая-либо документация вокруг? (Поверьте мне, я смотрел) Или есть объект выше по цепочке команд, который по умолчанию функционирует какNSTextDelegate
(например,NSTableView
)? Возможно ли, что некоторые методыNSTextDelegate
переопределяются другим классом, который находится первым в цепочке команд? - person Fnord23   schedule 03.04.2012-(IBAction)add:(id)sender
, которое, в свою очередь, использует описание объекта для вставки нового управляемого объекта в контекст управляемого объекта. Поэтому, когда пользователь фактически получает возможность редактировать свойство имени нового управляемого объекта, по крайней мере, некоторая проверка уже должна была произойти. Когда (необязательное) свойство имени не имеет значения по умолчанию (в IB), я хотел бы убедиться, что свойство имени не осталось пустым. - person Fnord23   schedule 16.04.2012-(BOOL)validate<Key>:error:
подкласса управляемого объекта не вызывается. С другой стороны, проверка вызывается, когда пользователь активно редактирует поле, удаляя существующее имя. - person Fnord23   schedule 16.04.2012