Проверка записей управления
NSControl обеспечивает метод делегации control:isValidObject:
для проверки содержания ячеек, встроенных в средства управления (экземпляры NSTextField и NSMatrix в частности). В проверке Вы проверяете на значения, которые допустимы как объекты, но которые являются нежелательным в данном контексте, таком как поле даты, в котором даты никогда не должны быть в будущем или почтовых индексах, которые допустимы для определенного состояния.
Метод control:isValidObject:
вызывается, когда точка вставки оставляет ячейку (т.е. связанное управление оставляет состояние первого респондента), но прежде чем строковое значение объекта ячейки выведено на экран. Возвратиться YES
позволить дисплей строки и NO
отклонить дисплей и возвратить курсор ячейке. Если дата находится в будущем, следующий пример Objective C оценивает объект (NSDate) и отклоняет его:
- (BOOL)control:(NSControl *)control isValidObject:(id)obj |
{ |
if (control == contactsForm) { |
if (![obj isKindOfClass:[NSDate class]]) return NO; |
if ([[obj laterDate:[NSDate date]] isEqual:obj]) { |
NSRunAlertPanel(@"Date not valid", |
@"Reason: date in future", NULL, NULL, NULL); |
return NO; |
} |
} |
return YES; |
} |
NSControl обеспечивает несколько методов делегата для своих подклассов, позволяющих редактирование текста, такое как NSTextField и NSMatrix. Некоторые вызываются, когда средства форматирования для ячеек управления не могут отформатировать строку (control:didFailToFormatString:errorDescription:
) или отклоните частичную строковую запись (control:didFailToValidatePartialString:errorDescription:
). NSControl также обеспечивает control:textView:doCommandBySelector:
, который позволяет делегатам возможность обнаружить и реагировать на привязки клавиш, такой как complete:
(назовите завершение). Обратите внимание на то, что несмотря на то, что NSControl определяет методы делегата, он самостоятельно не имеет делегата. Любой подкласс, использующий методы делегата, должен содержать делегата и методы, чтобы получить и установить его.