2016-08-25 7 views
0

スタックオーバーフロー(Getting row of UITableView cell on button press)を検索し、人々が動作すると主張する多くのソリューションを見つけましたが、まだ完璧なソリューションを見つけていません。私はそれをスクロールして最初のレスポンダにするために、CGITを使ってUITableView内の次の/前のUITextFieldのindexPathを取得しようとしています。しかし、私のテキストフィールドが別のセクションのUITableViewの前のフィールドの高さである場合は、大抵の場合は間違った結果が得られます。ここでUITableView内の次/前のUITextFieldのインデックスパス

は、コードは(:nextTxtFieldはUIViewのであることに注意してください):ある

CGPoint point = [nextTxtField convertPoint:CGPointZero toView:tableView];   
NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:point]; 

[UIView animateWithDuration:0.03 delay:0.0 options:0 animations:^{ 
      [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
     } completion:^(BOOL finished) { 
      dispatch_async(dispatch_get_main_queue(), ^(void){ 
       [nextTxtField becomeFirstResponder]; 
      }); 
     }]; 

答えて

0

あなたが呼び出すことのUITableViewの行/項目別のindexPathを得ることができます:

[NSIndexPath indexPathForRow:row inSection:section]; 
[NSIndexPath indexPathWithIndex:index]; 
[NSIndexPath indexPathForItem:item inSection:section]; 

あなたが得ればindexPathを使用すると、UITableViewCellを取得できます。

[_tableView cellForRowAtIndexPath:indexpath]; 

UITableViewCellを返します。それをあなたのセルクラスにキャストします(それについては確かめてください)。そのindexPathへのUITableViewをスクロールした後

[((YourCellClass *) cell).nextTxtField becomeFirstResponder] 

次に、あなたのようにnextTxtFieldのホールドをつかむことがあります。

+0

テーブルビューとuitextフィールドのみが与えられている場合は、indexPathを取得する必要があります。これは、特にUITableViewCellがビューから外れている場合には機能しません。cellForRowAtIndexPathは、セルの再利用のためにnilを返します。 – HawkEye1194

+0

uitableviewcellに含まれている再利用識別子を持つuitextfieldインスタンスはどのように指定されていますか?どのようにあなたはuitextfieldをつかむのですか? –

+0

申し訳ありません私は細胞の再利用をしません。私がしなければならなかったので、私はセルを割り当てます、私のテーブルはそれほど大きくはありません。だから私は配列内のコントロールへの参照があります。 – HawkEye1194

関連する問題