web-dev-qa-db-ja.com

UITableViewCellに埋め込まれている間、UITextFieldにファーストレスポンダーになるように指示する

UITextFieldのサブビューであるUITableViewCellがあります。

ビューが読み込まれると、テキストフィールドがファーストレスポンダーになります。テーブルセルのテキストフィールドへのポインターがあるので、これを行うために次のことを試みています。

[myTextField becomeFirstResponder];

これは、いつ呼び出されたかに関係なく、常にNOを返します。ドキュメントによると、テキストフィールドはファーストレスポンダーになることを拒否しました。

編集:

textfieldは、タッチされると適切に応答します。キーボードが表示されます。問題が発生するのは、プログラムでbecomefirstresponderに伝えるときだけです。

47
Jasarien

ファーストレスポンダーを送信しようとしたときに、テキストフィールドがゼロであることが判明しました。ライフサイクルの後半でbecomeFirstResponderを送信することができました。

43
Jasarien

グループ化されたテーブルビューセルにサブビューとして追加したテキストフィールドで同じ問題が発生していましたが、いくつかの問題を解決した後、解決策を見つけました。

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];
}
8
Jim Rhoades

-(void)viewDidLoadで呼び出すと機能します。

-(void)viewDidLoad{
   [super viewDidLoad];
   // Do any additional setup after loading the view.
   [self.myTextField becomeFirstResponder] 

   //... any other code you need 
}
5
miracules

UITextFieldcellForRowAtIndexPath内で最初に応答したときにカーソルが表示されませんでした。テキストフィールドはうまく機能しますが、フィールド内で点滅するカーソルは表示されませんでした。押し続けると、ズーム拡大もカーソルを表示しません。

becomeFirstResponderメソッド内にdidSelectRowAtIndexを設定することで、この奇妙な問題を回避しました。

1
Justin Kramer

UITableView editingプロパティはYESに設定されていますか?

0
Art Gillespie