Похоже, для этого нет встроенного механизма, как указывали другие ответчики. Как говорит Ник, для этого вам не нужен сложный шаблон делегирования. Вернее, вы используете шаблон делегата, но вы получаете класс делегата бесплатно. В этом случае это протокол UITextInput
.
Так что ваша клавиатура, вероятно, выглядит следующим образом (и имеет СИБ)
@interface ViewController : UIViewController
// use assign if < iOS 5
@property (nonatomic, weak) IBOutlet id <UITextInput> *delegate;
@end
При создании контроллера клавиатуры, вы назначаете UITextInput
конформера к нему, так что-то вроде этого:
- (void)viewDidLoad
{
[super viewDidLoad];
HexKeyboardController *keyboardController = [[HexKeyboardController alloc] initWithNibName:@"HexKeyboardController" bundle:nil];
self.textField.inputView = keyboardController.view;
keyboardController.delegate = self.textField;
}
Однако я думал, что ДОЛЖЕН быть способ определить эту клавиатуру только один раз и заставить клавиатуру «автоматически знать», кто вызвал ее объект UITextInput
. Но я огляделся безрезультатно ... вы не можете понять, кто такой firstResponder
, если вы не троллируете иерархию представлений самостоятельно или не сохраняете своих делегатов в списке (что вызовет цикл сохранения). Плюс, это не так плохо, потому что HexKeyboardController также выгрузит, когда отменяется textField
.
Я не получаю комментарий «use assign if
Привет @NickLockwood, я победил тебя до удара на 24 секунды на моем редактировании :) Серьезно, мои извинения, мой код был неправильным. –
Хе-хе, проклятая клавиатура iPhone - слишком медленная, чтобы вводить комментарии! –