我有一个UITextField,它已添加到collectionViewCell的子视图中。这是代码:
class ClientCell: UICollectionViewCell {
var width: CGFloat!
var height: CGFloat!
var textField: UITextField!
override init(frame: CGRect) {
super.init(frame: frame)
width = bounds.width
height = bounds.height
setupViews()
}
func basicTextField(placeHolderString: String) -> UITextField {
let textField = UITextField()
textField.font = UIFont.boldSystemFont(ofSize: 12)
textField.attributedPlaceholder = NSAttributedString(string: placeHolderString, attributes:[NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 12)])
textField.backgroundColor = UIColor.white
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupViews() {
backgroundColor = UIColor.white
layer.addBorder(edge: UIRectEdge.bottom, color: .black, thickness: 0.5)
textField = basicTextField(placeHolderString: "name")
addSubview(textField)
}
func buttonHandler() {
if let textFieldInput = textField.text {
print (textFieldInput)
} else {
print("Nothing in textField")
}
}
}
我在另一个调用此方法的类中有一个按钮,此刻打印出textField的当前输入(可能是因为在buttonHandler()函数中)。问题是,由于某些原因,textField总是返回为空,我不确定为什么。
编辑:
这是按钮在按下时调用的函数(按钮及其功能位于textField的单独类中):
func testButton() {
let test = ClientCell()
test.handler()
}
解:
我遇到的问题是,我在要按下按钮的类中创建了collectionViewCell的新实例。调用该函数时将为空。
为了解决该问题,我每次单击按钮时都使用NSNotificationCenter进行发布,并且在发布发布时触发了函数的CollectionViewCell类中的观察者。这是代码。
按下按钮时调用的函数:
func saveData() {
NotificationCenter.default.post(name: NSNotification.Name("saveProject"), object: nil)
}
collectionViewCell的viewDidLoad内部的代码:
class ClientCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
NotificationCenter.default.addObserver(self, selector: #selector(handler), name: NSNotification.Name("saveProject"), object: nil)
}
最后,该类中的观察者调用的函数
func handler() {
print(textField.text)
}
最佳答案
我将您的代码放在我的Playgroud项目中。这是工作。因此,我认为您的问题并非来自此类。
这是操场上的代码:
func buttonHandler() {
print(self.textField.text)
if let textFieldInput = self.textField.text {
print (textFieldInput)
} else {
print("Nothing in textField")
}
}
let cell = ClientCell(frame: CGRect(x: 0, y: 0, width: 200, height: 50 ))
cell.buttonHandler()
在控制台中,我有这个
可选的(””)
用一个空的ligne。 (由于此打印“ print(textFieldInput)”)
否则,您的代码中需要修复一些问题:
1)在“ basicTextField”函数中:您需要指定textField的框架
let textField = UITextField(frame: YOUR_DESIRED_FRAME)
2)在“ setupViews”函数中,您应该在Cell的content视图中添加textField:
contentView.addSubview(textField)
关于ios - 在CollectionViewCell中输入UITextField(swift 3 xcode),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42108927/