我正在尝试在我的应用程序中创建可重用的UI组件,此特定组件包含一个UITextFeild。我已经成功在视图中设置了文本字段,并且显示效果完美,但是...文本字段委托设置不起作用。
我尝试像这样从创建的对象引用文本字段
let sessionNameCell = ReusableComponents().createTextFieldCell()
sessionNameCell.textField.delegate = self
但是不能从控制器引用文本字段。
我还尝试过在创建视图的函数内部以多种方式设置委托:
textField.delegate = self
和
textField.delegate = ViewController()
最后一个崩溃了应用程序,据我了解,创建对象实例不是合适的解决方案
完整代码是...
视图控制器
class HostSessionSetupController : UITableViewController, UITextFieldDelegate {
private var sessionNameCell: UITableViewCell = ReusableComponents().createEditableTableRow(title: "Session Name", placeholder: "e.g. Marks birthday")
override func viewDidLoad() {
super.viewDidLoad()
sessionNameCell.textField.delegate = self
}
// The delegate method i need to run
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
if let input = textField.text {
if input != ""{
self.title = "Setup " + input
} else {
self.title = "Setup Session"
}
}
}
查看功能
func createTableRow(title: String, accessoryType: UITableViewCell.AccessoryType = .none) -> UITableViewCell {
let cell = UITableViewCell()
cell.backgroundColor = .backgroundDarkBlack
cell.textLabel?.textColor = .white
cell.textLabel?.text = title
cell.selectionStyle = .none
cell.accessoryType = accessoryType
return cell
}
func createEditableTableRow(title: String, placeholder: String) -> UITableViewCell{
let cell = createTableRow(title: title)
let textField = UITextField(frame: CGRect(x: 40, y: 0, width: cell.frame.width, height: cell.frame.height))
textField.textColor = .white
textField.attributedPlaceholder = NSAttributedString(string: placeholder, attributes: [NSAttributedString.Key.foregroundColor: UIColor.init(white: 1, alpha: 0.5)])
textField.keyboardAppearance = .dark
textField.returnKeyType = .default
textField.textAlignment = .right
cell.addSubview(textField)
return cell
}
我要从所有这些功能中获得的唯一功能是在键盘返回时隐藏键盘! D:
感谢所有帮助!
答案 0 :(得分:0)
创建单元格时,需要设置TextField的委托