私はtableViewにテキストフィールドを持っています。私はテキストフィールドの位置を取得する必要がありますが、問題はそこに複数のセクションがあるということです。 textfield.tag
を使ってセクションまたは行を1つだけ取得できますが、両方が必要です。テーブルビューのテキストフィールドのセクション数と行数を取得する方法は?
0
A
答えて
0
UIResponderチェーンを歩くことによって、どのクラスの親UIResponderを見つけることができます。 UITextFieldのとUITableViewCellの両方はそう、あなたのテキストフィールドに、この関数を呼び出すことができ、あなたのテキストフィールドの親tableViewCellを取得するには、UIResponderから継承UIViewの、継承:
extension UIResponder {
func findParentTableViewCell() -> UITableViewCell? {
var parent: UIResponder = self
while let next = parent.next {
if let tableViewCell = parent as? UITableViewCell {
return tableViewCell
}
parent = next
}
return nil
}
}
あなたはtableViewCellを持っていたら次に、あなただけのtableViewを頼みますtableView.indexPAth(for:)
とそのインデックスパスのためにあなたは、タグフィールドを使用する必要はありません:
guard let cell = textField.findParentTableViewCell(),
let indexPath = tableView.indexPath(for: cell) else {
print("This textfield is not in the tableview!")
}
print("The indexPath is \(indexPath)")
0
あなたは、私が書いたprevious answerのバリエーションを使用することができます。
セルとテーブルビューの間でデリゲートプロトコルを使用します。これにより、セルサブクラスにテキストフィールドデリゲートを維持できます。これにより、ビジネスロジックをビューコントローラに保持したまま、Interface Builderのプロトタイプセルにタッチテキストフィールドデリゲートを割り当てることができます。
ビューの階層をナビゲートする可能性のある脆弱な方法や、(挿入、削除または並べ替えの結果として)セルインデックスが変更されたときに問題が発生する、tag
プロパティの使用を回避します。ここでは、セクション番号と行番号を知る必要があります。
CellSubclass.swift
protocol CellSubclassDelegate: class {
func textFieldUpdatedInCell(_ cell: CellSubclass)
}
class CellSubclass: UITableViewCell {
@IBOutlet var someTextField: UITextField!
var delegate: CellSubclassDelegate?
override func prepareForReuse() {
super.prepareForReuse()
self.delegate = nil
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool
self.delegate?.textFieldUpdatedInCell(self)
return yes
}
ViewController.swift
class MyViewController: UIViewController, CellSubclassDelegate {
@IBOutlet var tableview: UITableView!
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CellSubclass
cell.delegate = self
// Other cell setup
}
// MARK: CellSubclassDelegate
func textFieldUpdatedInCell(_ cell: CellSubclass) {
guard let indexPath = self.tableView.indexPathForCell(cell) else {
// Note, this shouldn't happen - how did the user tap on a button that wasn't on screen?
return
}
// Do whatever you need to do with the indexPath
print("Text field updated on row \(indexPath.row) of section \(indexPath.section")
}
}
また、閉鎖ではなく、同じ質問でデリゲートパターンを使用してヤコブ王の答えを見ることができます。
関連する問題
- 1. テーブルビューのセルからテキストフィールドの値を取得する方法
- 2. 静的テーブルビューの行数を取得
- 3. Swiftのテキストフィールドから整数値を取得する方法は?
- 4. RxSwift - テキストフィールド、変数テーブルビュー
- 5. テキストフィールドから数値を取得する方法は?
- 6. 複数のセクションを持つ行とセクションのインデックスを取得しますか?
- 7. テキストフィールドの高さまたは行数を取得する
- 8. 複数のテキストフィールドからテキストを取得する方法は?ネットビーンとシーンビルダ
- 9. テキストを取得してテーブルビューのセル内のテキストフィールドから保存する方法
- 10. iOS:セクション化されたテーブルビューで行の位置を取得
- 11. 複数のセクションを含むテーブルビューをスウィフト
- 12. テーブルビューのセル数を取得する方法はありますか?
- 13. JQuery変数として行数を取得する方法
- 14. ボタンのテキストフィールド値を取得するテーブルビューをクリック
- 15. 先行ゼロの数字の桁数を取得する方法
- 16. Rails:テキストフィールドでonchangeリモート関数を実行すると、別のフィールドから値を取得する方法
- 17. 'name' colの値を取得する方法は、行数を取得するのと同じ方法ですか?
- 18. セクション内の行数を管理する方法は?
- 19. フラットファイルのフッターとして行数を取得する方法
- 20. iOS 2つの固定セクションとダイナミックなテーブルビューでレイアウトを行う方法は?
- 21. TextViewの実際の行数を取得する方法は?
- 22. テーブルが属するセクションとサブセクションを取得する方法は?
- 23. 引数行からの数値の取得方法は?
- 24. GridViewの行数を取得する方法は?
- 25. tableViewメソッドのリクエストから行数を取得する方法は?
- 26. 明日以降の行数を取得する方法は?
- 27. データベースからビューの行数を取得する方法は?
- 28. シートの行数を取得する方法は?
- 29. Pandasチャンクの行数を取得する方法は?
- 30. レポートのレコード数と総計の数を取得する方法
私は、[here](https://stackoverflow.com/questions/28659845/swift-how-to-get-the-indexpath-row-when-html-html)のアプローチと同様の委譲パターンまたはクロージャコールバックを使用することをお勧めします。 a-button-in-a-cell-is-tap/38941510#38941510)。タグを使用するかビュー階層を歩くことは "嫌な"です – Paulw11
ボタンはありませんそのテキストフィールド –
だから、私は同じように言っています* - ビューコントローラにイベントを戻すために委譲またはコールバッククロージャを使用します。タグを使用したり、階層ウォーキングを表示したりしないでください。 – Paulw11