gpt4 book ai didi

ios - 如何访问自定义单元格文本字段值 Swift 3.0

转载 作者:搜寻专家 更新时间:2023-11-01 05:52:35 25 4
gpt4 key购买 nike

我为包含文本字段的原型(prototype)单元格创建了一个自定义 tableViewCell 类。在 ThirteenthViewController 中,我想引用 tableViewCell 类,以便我可以访问它的 doorTextField 属性,以便将从 UserDefaults 检索到的数据分配给它。我该怎么做?

class ThirteenthViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate  {

var options = [
Item(name:"Doorman",selected: false),
Item(name:"Lockbox",selected: false),
Item(name:"Hidden-Key",selected: false),
Item(name:"Other",selected: false)
]
let noteCell:NotesFieldUITableViewCell! = nil


@IBAction func nextButton(_ sender: Any) {
//save the value of textfield when button is touched
UserDefaults.standard.set(noteCell.doorTextField.text, forKey: textKey)

//if doorTextField is not empty assign value to FullData
guard let text = noteCell.doorTextField.text, text.isEmpty else {
FullData.finalEntryInstructions = noteCell.doorTextField.text!
return
}
FullData.finalEntryInstructions = "No"
}


override func viewDidLoad() {
let index:IndexPath = IndexPath(row:4,section:0)
let cell = tableView.cellForRow(at: index) as! NotesFieldUITableViewCell
self.tableView.delegate = self
self.tableView.dataSource = self
cell.doorTextField.delegate = self
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return options.count
}


func numberOfSections(in tableView: UITableView) -> Int {
return 1
}


// configure the cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
-> UITableViewCell {

if indexPath.row < 3 {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = options[indexPath.row].name
return cell
} else {
let othercell = tableView.dequeueReusableCell(withIdentifier: "textField") as! NotesFieldUITableViewCell
othercell.doorTextField.placeholder = "some text"
return othercell
}
}
}//end of class



class NotesFieldUITableViewCell: UITableViewCell {
@IBOutlet weak var doorTextField: UITextField!

override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}

最佳答案

为了访问单元格中的 UITextField,您需要知道 UITableView 的哪一行包含您的单元格。在您的情况下,我相信该行始终是第 4 行。因此,您可以为该行创建一个 IndexPath,然后您可以简单地执行如下操作:

let ndx = IndexPath(row:3, section: 0)
let cell = table.cellForRow(at:ndx) as! NotesFieldUITableViewCell
let txt = cell.doorTextField.text

上面的语法可能不完全正确,因为我没有检查语法,但我相信你可以从那里得到它,对吧?

但是,请注意,为了使上述工作正常,最后一行(第 4 行)必须始终可见。如果您尝试获取不可见的行,您确实会遇到访问它们的问题,因为 UITableView 重用单元格并为可见数据行实例化单元格。

此外,如果您只是想获取用户键入的文本,并且当他们点击“Enter”时文本输入结束,您始终可以完全绕过访问表格行并添加一个 UITextFieldDelegate到您的自定义单元格以发送带有输入文本的通知,以便您可以收听通知并采取一些行动。

但是,正如我上面提到的,这完全取决于您的设置方式以及您想要实现的目标:)

更新:

根据进一步的信息,当调用 nextButton 方法时,您似乎想对文本值执行某些操作。如果是这样,以下应该(理论上)做你想做的事:

@IBAction func nextButton(_ sender: Any) {
// Get the cell
let ndx = IndexPath(row:4, section: 0)
let cell = table.cellForRow(at:ndx) as! NotesFieldUITableViewCell
//save the value of textfield when button is touched
UserDefaults.standard.set(cell.doorTextField.text, forKey: textKey)

//if doorTextField is not empty assign value to FullData
guard let text = cell.doorTextField.text, text.isEmpty else {
FullData.finalEntryInstructions = cell.doorTextField.text!
return
}
FullData.finalEntryInstructions = "No"
}

关于ios - 如何访问自定义单元格文本字段值 Swift 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43036889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com