Я пытаюсь получить подпредставление, чтобы стать первымответчиком. Насколько я понимаю, это делается с помощью метода viewDidAppear, например:
- (void)viewDidAppear {
[self becomeFirstResponder];
}
при переопределении canBecomeFirstResponder для возврата YES:
- (BOOL)canBecomeFirstResponder {
return YES;
}
однако, когда я вставляю подпредставление в метод viewDidLoad его родительского представления:
- (void)viewDidLoad {
subViewController = [[SubViewController alloc] init];
[self.view insertSubview: subViewController.view atIndex: 0];
[subViewController viewDidAppear: NO];
[super viewDidLoad];
}
(я вызываю viewDidAppear вручную, потому что он не запускается автоматически), подпредставление не становится firstResponder.
почему подпредставление не становится первым ответчиком? и как я могу сделать это первым ответчиком?
спасибо,
mbotta
Кстати, это переписать мой оригинальный вопрос:
Я пытаюсь создать приложение для iphone, где объект rootviewcontroller управляет двумя подпредставлениями, одно из которых должно реагировать на пользователя, трясущего его iphone.
после некоторого копания я пришел к выводу, что подпредставление должно быть сделано firstResponder в методе viewDidAppear контроллера его представления. более того, метод canBecomeFirstResponder должен быть изменен так, чтобы он возвращал YES.
так вот что происходит: я создаю экземпляр rootviewcontroller в делегате приложения. в его методе viewDidLoad я говорю ему добавить addSubView firstViewController. все это прекрасно работает.
однако firstViewController не реагирует на любые колебания. я разбросал несколько NSLogs и обнаружил, что хотя мы действительно говорим firstViewController в canBecomeFirstResponder, чтобы он возвращал YES, и в то время как мы действительно сообщаем ему [self становитьсяFirstResponder] в viewDidAppear, в действительности это , а не firstResponder.
Итак, мои вопросы:
1) действительно ли подпредставление должно быть firstResponder, чтобы реагировать на встряхивание?
а) если нет, то как реагирует подпредставление, не будучи первым ответчиком?
2) как сделать первый ответ первым ответчиком?
что делает это интересным, так это то, что если я выполняю ту же последовательность (canBecomeFirstResponder, [self firstResponder], motionBegan :) в другом проекте с одним контроллером представления, все это работает безупречно. ясно, что я, должно быть, столкнулся с недостатком дизайна моего собственного дизайна.
спасибо,
mbotta