4

UITextFieldsのカスタムセル内に2つありUITableViewます。textFields の値を編集して保存する必要があります。内部をクリックするUITextFieldと、ローカル配列の正しいレコードに値を保存するために、それが属する行を知る必要があります。textField の行インデックスを取得するにはどうすればよいですか? 私は試した :

-(void)textFieldDidBeginEditing:(UITextField *)textField
{

     currentRow = [self.tableView indexPathForSelectedRow].row;


}

しかし、UITextFieldRow 内をクリックしても currentRow は変化しません。行全体をクリック (選択) した場合にのみ変化します...

4

5 に答える 5

5

iOS 8 では、シミュレーターとデバイスのスーパービューの数が異なることがわかったので、これはもう少し一般的であり、iOS のすべてのバージョンで機能するはずです。

UIView *superview = textField.superview;
while (![superview isMemberOfClass:[UITableViewCell class]]) { // If you have a custom class change it here
    superview = superview.superview;
}

UITableViewCell *cell =(UITableViewCell *) superview;
NSIndexPath *indexPath = [self.table indexPathForCell:cell];
于 2014-10-02T21:11:10.237 に答える
4

これを試して

//For ios 7

UITableViewCell *cell =(UITableViewCell *) textField.superview.superview.superview;
NSIndexPath *indexPath = [tblView indexPathForCell:cell];


//For ios 6

UITableViewCell *cell =(UITableViewCell *) textField.superview.superview;
NSIndexPath *indexPath = [tblView indexPathForCell:cell];
于 2013-10-16T12:46:27.677 に答える
0

1>CellForRowAtIndexPath にテキスト フィールドをプログラムで作成し、テキスト フィールドのタグを indexpath.row として設定することで、これを実現できます。次に、 textFieldDidBeginEditing を使用すると、 textField.tag をフェッチして、必要なものを実現できます。

2>もう 1 つの方法は、1 つのテーブル ビューに 2 つのカスタム セルを配置することです。このようにして、テキスト フィールドを個別に配置し、ユーティリティ パネルからタグを設定できます。

于 2013-10-16T12:48:11.527 に答える
0

私がしているのは、カスタム セルを作成し、必要なカスタム UI 要素を内部に配置indexPathし、セルがデキューされたときに設定されるプロパティを作成することです。次に、indexPath を のカスタム要素に渡しdidSetます。

class EditableTableViewCell: UITableViewCell {

    @IBOutlet weak var textField: TableViewTextField!

    var indexPath: IndexPath? {
       didSet {
           //pass it along to the custom textField
           textField.indexPath = indexPath
        }
    }
}


class TableViewTextField: UITextField {
     var indexPath: IndexPath?
}

TableView

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "EditableCell") as! EditableTableViewCell
        cell.indexPath = indexPath
        return cell
}

次に、UITextFieldDelegateプロトコルを実装します。textField には indexPath があるため、どこから来たかを常に知ることができます。デリゲートを設定するのに最適な場所がどこにあるかわかりません。最も簡単なのは、セルがデキューされたときに設定することです。

override func textFieldDidEndEditing(_ textField: UITextField) {
    guard let myTextField = textField as? TableViewTextField else { fatalError() }
    guard let indexPath = myTextField.indexPath else { fatalError() }
 }
于 2017-05-08T20:45:24.650 に答える