1

UITextField を UITableViewcell の contentView として追加しようとしています。それは機能し、フィールドにはフォーカスがありますが、detailTextLabel は 10 ピクセル上にスライドします。ここでの取引は何ですか?二次的な質問として、インラインで編集可能な UITableViewCell を作成するより良い方法はありますか?

これが私のコードです。テーブルビューセルをダブルタップした結果、これを実行しようとしています。次のようにタップされた実際のセルを取得します。

CGPoint swipeLocation = [recognizer locationInView:self.tableView];
NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
UITableViewCell *swipedCell;

次に、次のようにテキストフィールドを追加しようとします:

swipedCell = [self.tableView cellForRowAtIndexPath:swipedIndexPath];
NSInteger indent = swipedCell.indentationWidth;
UITextField * newText = [[UITextField alloc] initWithFrame:CGRectMake(indent, swipedCell.contentView.frame.origin.y, swipedCell.contentView.frame.size.width, swipedCell.contentView.frame.size.height)];
newText.font = swipedCell.textLabel.font;
newText.text = swipedCell.textLabel.text;
newText.textColor = [UIColor grayColor];
newText.autoresizingMask =  UIViewAutoresizingFlexibleWidth |  UIViewAutoresizingFlexibleHeight;
swipedCell.textLabel.text = @"";
[swipedCell addSubview:newText];
[newText becomeFirstResponder];

あなたのコードを適用すると、テキストと詳細ラベルの両方がセルの中央に配置されることを除いて、あなたのものとまったく同じです。

4

1 に答える 1

2

コードを見なければ、何が起こっているのかを知ることは困難です。問題なく動作する contentView セルとして UITextField を作成するために使用するコードを次に示します。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"TaxCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
CGFloat optionalRightMargin = 10.0;
CGFloat optionalBottomMargin = 10.0;
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(275, 10, cell.contentView.frame.size.width - 270 - optionalRightMargin, cell.contentView.frame.size.height - 10 - optionalBottomMargin)];


textField.placeholder = @"Placeholder";
textField.delegate = self;
textField.autoresizingMask =  UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
textField.clearButtonMode = UITextFieldViewModeWhileEditing;

textField.text = @"Textfield text"
cell.textLabel.text = @"Textlabel text"
cell.detailTextLabel.text = @"Detail text";
[cell.contentView addSubview:textField];

return cell; }
于 2013-08-20T02:07:22.460 に答える