0

それぞれに UITextField を含むいくつかのカスタム UITableViewCells を保持する UITableView を実装しています。

いくつかのイベントでキーボードを非表示にすることを望むほとんどの人とは異なり、私は常に表示することを望んでいます。問題は、UITextField を最初にタップすると、問題なくキーボードが表示されることです。しかし、もう一度タップすると、現在表示されているキーボードが消えます。

さらに、別の関連する問題は、UITextField 内でカーソルの位置を変更できないことです。カーソルの現在の位置を変更するために UITextField をタップしたままにすると、期待どおりに虫眼鏡がポップアップします。しかし、タップを離すと、キーボードはすぐに閉じます。

この問題を解決するにはどうすればよいですか?

- (void)viewDidLoad
{
    ...
    TagDetailCell *cell1 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject];
    TagDetailCell *cell2 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject];
    TagDetailCell *cell3 = [[[NSBundle mainBundle] loadNibNamed:@"TagDetailCellView" owner:self options:nil] lastObject]; 
    self.cells=[NSArray arrayWithObjects:cell1, cell2, cell3, nil];
    ...
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[self.cells objectAtIndex:indexPath.row];
    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    switch (indexPath.row) {
        ...
        ((TagDetailCell*)cell).fieldLabel.text= ...;
        ((TagDetailCell*)cell).fieldValue.clearButtonMode=UITextFieldViewModeWhileEditing;
        ((TagDetailCell*)cell).fieldValue.text=...;
        [((TagDetailCell*)cell).fieldValue addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];
        ...
    }
    return cell;

}

UITextField のデリゲートは実装しませんでした。するべきか?

4

2 に答える 2

1

私は愚かでした。ユーザーがテキストをコピー/貼り付けできないように、UITextFieldをサブクラス化し、次のメソッドをオーバーライドします。

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender    
{    
    [UIMenuController sharedMenuController].menuVisible = NO;  //do not display the menu
    [self resignFirstResponder];                      //do not allow the user to selected anything
    return NO;
}

キーボードを閉じる問題は、の呼び出しから発生しました[self resignFirstResponder]。したがって、それを削除すると問題が解決します。

于 2012-04-12T15:38:53.043 に答える