Если в вашем подклассе UIViewController есть следующее
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.view.window) {
[self becomeFirstResponder];
}
}
тогда вы, вероятно, намеревались позволить этому подклассу обрабатывать события движения (встряхивание) или что-то подобное. Так что, вероятно, поэтому он там.
Если вы не смогли отредактировать UITextField
s, то этот подкласс, вероятно, стал первым респондентом и не перенаправил событие фактическому UITextField
. Когда подкласс UIViewController
вызывает переопределения canBecomeFirstResponder
для возврата YES
и делает их самостоятельно первым респондентом (т. Е. [self becomeFirstResponder]
, если вы не хотите, чтобы этот пользовательский класс обрабатывал события касания для UITextField
, тогда вы должны переопределить метод nextResponder
.
Пример из моего собственного продукта. По сути, у меня есть подкласс UIViewController
, который выполняет две вещи: 1) обрабатывает события встряхивания и 2) отображает другой вид модально при нажатии какой-либо кнопки. На модальном виде есть несколько UITextField
с. Чтобы мой подкласс UIViewController
мог перенаправить сенсорные события в мой модальный вид, я добавил следующее:
- (UIResponder *)nextResponder
{
if (!self.view.window) {
// If the modal view is being displayed, forward events to it.
return self.modalViewController;
} else {
// Allow the superclass to handle event.
return [super nextResponder];
}
}
Это будет работать на iOS 4 и 5 с любым sdk.
Теперь, в вашем случае вы, очевидно, не помните, что добавили код, чтобы стать первым респондентом, поэтому вам не нужны вышеуказанные хуки. Тем не менее, это хорошо знать на будущее.
Возвращаясь к вашему актуальному вопросу - после того, как вы обновили свой SDK до 5, почему бы не работать на iOS 4, а на iOS 5? iOS 5 делает некоторые пересылки событий для вас, поэтому он работает там. Сначала он никогда не работал на iOS 4. Apple исправила некоторые ошибки, которые позволяли ему работать на 4, поэтому он больше не работает на 4.
Я знаю, что вопрос уже принял принятый ответ; Я просто хотел прояснить ситуацию.