0

カスタムテキストビューを含むテーブルビューセルがあります。テキストが編集/追加された後、テキストボックス内のテキストにどのようにアクセスできるのか疑問に思っています。

通常、IB を使用してテキスト フィールドを描画すると、これがどのように行われるかがわかりますが、textviewcell は動的に描画されます。

(つまり、detailLabel.text で更新されたデータをキャプチャしたい)

あなたの答えに適応するための関連コードは次のとおりです。再度、感謝します!

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];


    //Big Text Box
    UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, 500, 150)];
    detailLabel.tag = 20;
    [cell.contentView addSubview:detailLabel];
    detailLabel.layer.borderWidth = 1;
    detailLabel.layer.borderColor = [[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.9] CGColor];
    detailLabel.layer.cornerRadius = 10;
    detailLabel.font = [UIFont fontWithName:@"Helvetica" size:17];
    [detailLabel release];

} 

UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];

switch (indexPath.row) {

case 0:
    detailLabel.text = @"no";
    break;
default:
    detailLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    detailLabel.hidden = NO;    

}
4

1 に答える 1

3

UITextViewによって送信されたメッセージをリッスンする必要があります。したがって、UITextViewDelegateプロトコルを実装し、デリゲートプロパティを使用して実装クラスをdetailLabelに登録することを検討してください。

UITextViewの変更がデリゲートに通知されたら、現在UITextViewを所有しているセルを特定する必要があります。その際、セルは再利用できることを覚えておく必要があります。

UITableViewクラスの次のメソッドを確認することから始めます。

- (NSArray *)visibleCells

ユーザーがUITextViewのコンテンツに変更を加えた場合、それは現在画面に表示されている必要があるため、前述の配列に存在している必要があります。それを見つけるために、変更されたUITextViewへのポインターを使用します(これはtextViewDidChangeプロトコルメソッドのパラメーターです)。したがって、visibleCells配列を繰り返し処理し、UITextViewを取得して、変更されたUITextViewと比較します。

- (void)textViewDidChange:(UITextView *)textView {
....
cellsLabel = (UITextView *) [cell.contentView viewWithTag:20];
if (cellsLabel == textView)
...

これで、UITableViewのセルへのハンドルができました。インデックスを見つけるには、次のUITableViewメソッドを使用します。

- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell
于 2010-02-22T13:00:35.067 に答える