はじめに
TextFieldを選択した時にキーボードで隠れないようにする際の事。
複数のTextFieldがある場合に、選択したTextFieldの下に調度良くキーボードが表示されるよう調整したかったため、どのコントロールがFirstResponderか取得する必要がありました。
調べた結果、こんな実装で取得できました。
FirstResponder取得メソッド
+ (UIView *)findFirstResponder:(UIView *)view
{
if (view.isFirstResponder) {
return view;
}
for (UIView *subView in view.subviews) {
if ([subView isFirstResponder]) {
return subView;
}
UIView *responder = [self findFirstResponder:subView];
if (responder) {
return responder;
}
}
return nil;
}
ユーティリティクラスのクラスメソッドとして実装しました。
UIViewのカテゴリにするのも良いと思います。
使い方
UIView *control = [Utils findFirstResponder:self.view];
// nilではない場合、FirstResponderが存在
if ([control isKindOfClass:[UITextField class]]) {
NSLog(@"%@", control.description);
}
おわりに
参考になりましたら幸いです。