0

グループ化されたテーブルビューが追加されたViewControllerがあります。一部のセルにはテキストフィールドが含まれています。ユーザーがリターンキーを押したときに、最初のレスポンダーをセルリストの次のテキストフィールドに切り替えたいと思います。ただし、それを機能させることができず、間違ったセルが選択されているのか、間違ったテキストフィールドが選択されているのかわかりません。

次のようにcellForRowAtIndexPathにタグを設定しています。

cell.tag = ((indexPath.section + 1) * 10) + indexPath.row;

これにより、10の位がセクション値で、1の位が行値であるタグが作成されます。すなわち。タグ11はセクション0の行1です。

これが私のtextFieldShouldのコードです

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

[textField resignFirstResponder];

UITableViewCell *cell = (UITableViewCell *)textField.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath];

if (indexPath.section == 0)
{
    if (indexPath.row == 0)
    {
        [[cell viewWithTag:((indexPath.section + 1) * 10) + (indexPath.row + 1)] becomeFirstResponder];
    }
    if (indexPath.row == 1)
    {
        [[cell viewWithTag:((indexPath.section + 2) * 10)] becomeFirstResponder];
    }
}
return YES;
}

最後に、現在、新しいタグの増分はハードコーディングされていますが、毎回実際の値をハードコーディングせずに新しいタグに移動できるようにしたいと思います。これは可能ですか?

4

2 に答える 2

3

すべてのセルに1つのUITextFieldが含まれている場合は、ここで行ったように、UITableViewCellをサブクラス化して、セルのテキストフィールドを参照するプロパティを追加できます。

ただし、一部のセルにのみテキストフィールドが含まれているとのことでした。そのため、別のオプションとして、UITextFieldsへのポインターの配列を作成することもできます(ここでアイデアを得ました)。次に、Returnキーを押すユーザーは、次のようにそれらを循環します。

- (BOOL) textFieldShouldReturn:(UITextField*)textField {
    NSUInteger currentIndex = [arrayOfTextFields indexOfObject:textField] ;
    if ( currentIndex < arrayOfTextFields.count ) {
        UITextField* nextTextField = (UITextField*)arrayOfTextFields[currentIndex+1] ;
        [nextTextField becomeFirstResponder] ;
    }
    else {
        [textField resignFirstResponder] ;
    }
}
于 2013-02-13T17:22:34.747 に答える
1

タグをセルではなくtextFieldに設定します。

yourTextField.tag = ((indexPath.section + 1) * 10) + indexPath.row;
于 2013-02-13T17:34:56.280 に答える