2

テーブルビューで実装するカスタムセルがあります。セル内にテキスト フィールドがあります (テンキー キーボードに設定)。テーブル ビュー内には 12 個のセルがあります。カスタムセルクラスに入れたコードを使用して、キーボードをダスミスできますtouchesBegan(ただし、編集中のアクティブセルをタップした場合にのみ機能します)。キーボードを文字と数字に変更すると、キーボードを閉じることもできます。テキストフィールドを閉じたいキーボードにカスタムの「DONE」ボタンがあります。

endEditing:YESorでキーボードを閉じようとしばらく試みましたが、うまくいき[cell.textFieldAnswer resignFirstResponder]ません。

何か案は?

SecurityQuestions.m:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[GetQuestionsCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }


    NSInteger nextIndexPathRow = indexPath.row;
    nextIndexPathRow++;
    cell.labelQuestion.text = [arrayOfQuestions objectAtIndex:indexPath.row];
    cell.labelQuestionNumber.text = [NSString stringWithFormat:@".%d", nextIndexPathRow];

    switch (indexPath.row) {
        case 0:
            tfA1 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 1:
            tfA2 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 2:
            tfA3 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 3:
            tfA4 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 4:
            tfA5 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 5:
            tfA6 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 6:
            tfA7 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 7:
            tfA8 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 8:
            tfA9 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 9:
            tfA10 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 10:
            tfA11 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
        case 11:
            tfA12 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
            break;
    }
    cell.textFieldAnswer.tag = indexPath.row;
    cell.textFieldAnswer.delegate = self;
    [cell.textFieldAnswer setText:[answers objectAtIndex:indexPath.row]];
    return cell;
}

GetQuestionsCustomCell.m:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.textFieldAnswer resignFirstResponder];
}

編集1:

私がやっているとき:[cell performSelector@selector(KeyDown:)]私はクラッシュしています。KeyDown は、カスタム セル ビュー コントローラー内にあります。注:上記のように、「セル」はカスタムセルとして構成されています。

エラー:

スレッド 1: EXC_BAD_ACCESS (コード = 2、アドレス = 0x631ec)

編集 2: 'Thilina' のプライベート チャットでのすべての助けに感謝します。

- (void)doneAction:(id)sender{ 
NSArray *cells = [self.tableView visibleCells]; 
for(UIView *view in cells){ 
if([view isMemberOfClass:[GetQuestionsCustomCell class]]){ 
GetQuestionsCustomCell *cell = (GetQuestionsCustomCell *) view; 
UITextField *tf = (UITextField *)[cell textFieldAnswer]; 
if([tf isFirstResponder]){ 
[tf resignFirstResponder]; 
} 
} 

} 
}
4

1 に答える 1

5

1) デリゲート UITextFieldDelegate を ViewController に追加します。

@interface ViewController ()<UITextFieldDelegate>

2) textFieldShouldReturn メソッドを実装する

-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

3) tableView cellForRowAtIndexPath メソッドでスイッチを変更します。

switch (indexPath.row) {
    case 0:{
        tfA1 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA1.delegate = self;
        }
        break;
    case 1:{
        tfA2 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA2.delegate = self;
    }break;
    case 2:{
        tfA3 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA3.delegate = self;
    }break;
    case 3:{
        tfA4 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA4.delegate = self;
    }break;
    case 4:{
        tfA5 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA5.delegate = self;
    }break;
    case 5:{
        tfA6 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA6.delegate = self;
    }break;
    case 6:{
        tfA7 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA7.delegate = self;
    }break;
    case 7:{
        tfA8 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA8.delegate = self;
    }break;
    case 8:{
        tfA9 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA9.delegate = self;
    }break;
    case 9:{
        tfA10 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA10.delegate = self;
    }break;
    case 10:{
        tfA11 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA11.delegate = self;
    }break;
    case 11:{
        tfA12 = (UITextField*)[cell viewWithTag:nextIndexPathRow];
        tfA12.delegate = self;
    }break;
}
于 2013-05-05T12:10:00.407 に答える