gpt4 book ai didi

swift - 使用 CustomCell(子类)文本字段符合 UITextField 委托(delegate)

转载 作者:可可西里 更新时间:2023-11-01 01:28:30 24 4
gpt4 key购买 nike

我有一个子类 CustomCell,它继承 self 的父类 CreateEvent。该子类描述了 TableView 单元格的各个单元格,它位于 CreateEvent View Controller 上。在一个特定的单元格中,我有一个链接到 CustomCell 文件的文本字段,但是当用户输入文本字段时,我无法从该文本字段获取值。我也无法通过外部触摸关闭键盘并按下返回键,但我主要专注于从文本字段中获取文本。我熟悉在一个普通的 swift 文件上执行这些功能,但是因为这是一个子类和两个 swift 文件,所以我不确定该怎么做。这是我的代码:

class CustomCell: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var entranceFeeTextField: UITextField!

override func awakeFromNib() {
super.awakeFromNib()

}

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

class CreateEventVC: UIViewController, UITableViewDelegate, UITableViewDataSource, CustomCellDelegate, UITextFieldDelegate {

override func viewDidLoad() {
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let currentCellDescriptor = getCellDescriptorForIndexPath(indexPath)
let cell = tableView.dequeueReusableCell(withIdentifier: currentCellDescriptor["cellIdentifier"] as! String, for: indexPath) as! CustomCell

// the following code describes the array for an expandable drop down
if currentCellDescriptor["cellIdentifier"] as! String == "idCellNormal" {
if let primaryTitle = currentCellDescriptor["primaryTitle"] {
cell.textLabel?.text = primaryTitle as? String
}

eventType = ((cellDescriptors[0] as! NSMutableArray)[0] as! NSDictionary)["primaryTitle"]! as! String
if let secondaryTitle = currentCellDescriptor["secondaryTitle"] {
cell.detailTextLabel?.text = secondaryTitle as? String
}
}
else if currentCellDescriptor["cellIdentifier"] as! String == "idCellTextfield" {
cell.textField.placeholder = currentCellDescriptor["primaryTitle"] as? String
}


else if currentCellDescriptor["cellIdentifier"] as! String == "idCellValuePicker" {
cell.textLabel?.text = currentCellDescriptor["primaryTitle"] as? String
}

cell.delegate = self

return cell
}


func textFieldShouldEndEditing(textField:UITextField) -> Bool {
entranceFeeAmount = cell.entranceFeeTextField.text!

return true;
}

}

我的主要问题是我不确定如何设置文本字段委托(delegate),以及如何正确地符合委托(delegate)。

最佳答案

由于只有一个特定的单元格包含文本字段,因此在您的自定义单元格的 awakeFromNib() 中,检查文本字段是否存在,然后设置文本字段的委托(delegate)。

override func awakeFromNib() {
super.awakeFromNib()

if (self.entranceFeeTextField != nil) {
self.entranceFeeTextField.delegate = self as UITextFieldDelegate
}
}

您可以使用委托(delegate)将文本字段中的文本传递给 CreateEvent View Controller 。

要实现委托(delegate),请在 CustomCell 类的顶部创建一个协议(protocol),并添加一个方法将字符串从 CustomCell 传输到 CreateEventVC .

protocol CustomCellDelegate {
func getTextFieldString(string: String)
}

在您的 CustomCell 类中声明一个委托(delegate)变量。

var delegate: CustomCellDelegate?

触发textFieldDidEndEditing中的协议(protocol)方法:

func textFieldDidEndEditing(_ textField: UITextField) {
delegate?.getTextFieldString(string: self.entranceFeeTextField.text!)
}

现在,让CreateEventVC遵循CustomCellDelegate协议(protocol),并在CreateEventVC中实现func getTextFieldString(string: String) >.

func getTextFieldString(string: String) {
print(string) //do whatever you want with it
}

tableView(_, cellForRowAt:) 中,记得设置 cell.delegate = self 因为我们希望 CreateEventVC 成为接收者。

关于swift - 使用 CustomCell(子类)文本字段符合 UITextField 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064605/

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