10

ipadアプリを開発しています。アプリに UITableview があります。UITableview は、サブビューとして 1 つのラベルとテキストビューを使用してプログラムで作成されます。テーブルビューには最大 5 行まで表示できます。一度に 2 行がユーザーに表示されます。実行時には、テキストビューにテキストを入力し、ローカルの sqlite db に保存する必要があります。コードに textViewDidBeginEditing デリゲートと textViewDidEndEditing デリゲートを実装しました。textViewDidEndEditing デリゲートで、NSMUtable 配列に (textview に入力された) テキストを追加/置換しようとしています。そのためには、テキストを入力するテキストビューの行インデックスが必要です。配列内のそれぞれの行インデックスを追加/置換できるようにします。

テキストビューの行インデックスを取得する方法を教えてください。

4

5 に答える 5

25

あなたTextViewはある種の細胞に含まれます。このセルを見つけたら、テーブルにインデックスを要求できます。ビュー階層を上に移動TextViewして、セルを見つけます。例えば:

TextView* textView = // your textView;
UITableViewCell* cell = (UITableViewCell*)[textView superview];
UITableView* table = (UITableView *)[cell superview];
NSIndexPath* pathOfTheCell = [table indexPathForCell:cell];
NSInteger rowOfTheCell = [pathOfTheCell row];
NSLog(@"rowofthecell %d", rowOfTheCell);
于 2012-12-05T13:01:59.877 に答える
7

で、本当にシンプルcellForRowAtIndexPathです。textView好きなタグを付けるだけ

cell.txtView.tag = indexPath.row;

textView Delegate メソッドで、次のコードを使用して行を見つけます ( textViewDidBeginEditing)

int row = textView.tag;
于 2012-12-05T14:27:13.823 に答える
3

これは、あなたが求めたことを達成するためのよりエレガントな方法です

CGPoint senderPosition = [sender convertPoint:CGPointZero toView:self.tableView];

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:senderPosition];
于 2016-04-21T14:06:18.803 に答える
3

iOS 8.4で実行されているSwiftの場合:

@IBAction func signInUpBigButtonPressed(sender: SignInUpMenuTableViewControllerBigButton) {
    // We set the self.indexCellContainingButtonClicked with the cell number selected.
    var parentCell: UIView! = sender
    do {
        parentCell = parentCell.superview!
    } while !(parentCell is UITableViewCell)
    let cell = parentCell as! UITableViewCell
    self.indexCellContainingButtonClicked = self.tableView.indexPathForCell(cell)!.row
}
于 2015-07-13T17:14:25.723 に答える
1

IOS 8.3 を実行すると、textViewDidEndEditing
メソッド内でこれが検出され、実装されました。うまくいきます!

UIView *parentCell = sender
while (![parentCell isKindOfClass:[UITableViewCell class]]) {   // iOS 7 onwards the table cell hierachy has changed.
    parentCell = parentCell.superview;
}

UIView *parentView = parentCell.superview;

while (![parentView isKindOfClass:[UITableView class]]) {   // iOS 7 onwards the table cell hierachy has changed.
    parentView = parentView.superview;
}


UITableView *tableView = (UITableView *)parentView;
NSIndexPath *indexPath = [tableView indexPathForCell:(UITableViewCell *)parentCell];

NSLog(@"indexPath = %@", indexPath);
于 2015-06-22T19:52:01.203 に答える