2011-10-18 11 views
0

私はいくつかのフィールドを持っています。私はリターン/次のキーを押して、ユーザーに声を掛けて一方から他方へスキップしてそれぞれにデータを入力したいと思います。私は、私は、ユーザーが次とリターン/次のキーを押すたびにキャプチャしていますUITableViewCellのリターン/次のキーを使用して、次のUITextFieldにフォーカスを設定します。

// Customize the appearance of table view cells. 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
reuseIdentifier:CellIdentifier] autorelease]; 

     UITextField *FirstField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 130, 25)]; 
     FirstField.delegate = self; 
     FirstField.tag = indexPath.row; 
     [cell.contentView addSubview:FirstField]; 
     FirstField.returnKeyType = UIReturnKeyNext; 
     [FirstField release];  
    } 

    // Configure the cell... 

    return cell; 
} 

を持っている:

// Handle any actions, after the return/next/done button is pressed 

- (BOOL)textFieldShouldReturn:(UITextField *)textfield 

をしかし、私はどのようなセル/位置/フィールドを知っていても、私がでていますプログラムに次のプログラムに焦点を当てるにはどうすればよいですか?私は情報があれば、becomeFirstResponderを使わなければならないことを知っています。

+0

下部ケース(代わりに 'FirstField'の' firstField')で始まるあなたの変数を持つことをお勧めします。ご覧のように、スタックオーバーフローでさえ、自動構文強調表示はちょっと混乱します。 – nacho4d

+0

値1のタグを追加します。ゼロから作成しません。indexPath.rowをassighすると、最初の行はゼロになります。 FirstField.tag = indexPath.row + 1; –

答えて

2

現在のタグ を使用してnextFieldを取得し、そのフィールドを最初のレスポンダとして作成すると、それを行うことができます。

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
      int previouTag = textField.tag; 
    if (previouTag<=numberOfRows) { 
     UITextField *tempField=(UITextField *)[self.view viewWithTag:previouTag+1]; 
     [tempField becomeFirstResponder]; 
    } 
} 
+0

あなたはこれの例を私に見せてもらえますか? nxtTag? –

+0

EXC_BAD_ACCESS、あなたの絶対に正しい!それは今、私は3つのリターン/次に押すごとに細胞を移動する必要があります。私はこのためのコードを見たと信じています。ありがとう、私はこれを不可能な仕事と思わせる他の記事を読んだ。 –

+0

何か面白いことが起こっている、numberOfRows定数を#define knumberOfRows 3の.hファイルにすると、コンパイラは私に予想通りのエラーを出す);トークン???なぜそれを認識していないのですか? –

0

`

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    BOOL finedNext = NO; 
    int viewIndex = [self.mainScroll.subviews indexOfObject:textField]; 
    for (int i = viewIndex+1; i < self.mainScroll.subviews.count; i++) { 
     if (!finedNext) { 
      UIView *view = [self.mainScroll.subviews objectAtIndex:i]; 
      if ([view isKindOfClass:[UITextField class]]) { 
       finedNext = YES; 
       [view becomeFirstResponder]; 
      } 
     } 
    } 

    return YES; 
} 

`