UITextField
のサブビューであるUITableViewCell
があります。
ビューが読み込まれると、テキストフィールドがファーストレスポンダーになります。テーブルセルのテキストフィールドへのポインターがあるので、これを行うために次のことを試みています。
[myTextField becomeFirstResponder];
これは、いつ呼び出されたかに関係なく、常にNO
を返します。ドキュメントによると、テキストフィールドはファーストレスポンダーになることを拒否しました。
編集:
textfield
は、タッチされると適切に応答します。キーボードが表示されます。問題が発生するのは、プログラムでbecomefirstresponder
に伝えるときだけです。
ファーストレスポンダーを送信しようとしたときに、テキストフィールドがゼロであることが判明しました。ライフサイクルの後半でbecomeFirstResponder
を送信することができました。
グループ化されたテーブルビューセルにサブビューとして追加したテキストフィールドで同じ問題が発生していましたが、いくつかの問題を解決した後、解決策を見つけました。
CellForRowAtIndexPathメソッドでテキストフィールドにタグを指定したと仮定すると、次のようなことができます。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
myTextField = (UITextField *)[cell viewWithTag:kMyTextFieldTag];
[myTextField becomeFirstResponder];
}
-(void)viewDidLoadで呼び出すと機能します。
-(void)viewDidLoad{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.myTextField becomeFirstResponder]
//... any other code you need
}
UITextField
がcellForRowAtIndexPath
内で最初に応答したときにカーソルが表示されませんでした。テキストフィールドはうまく機能しますが、フィールド内で点滅するカーソルは表示されませんでした。押し続けると、ズーム拡大もカーソルを表示しません。
becomeFirstResponder
メソッド内にdidSelectRowAtIndex
を設定することで、この奇妙な問題を回避しました。
UITableView editing
プロパティはYES
に設定されていますか?