我有一個UITextField,我在我的collectionViewCell的子視圖中添加了UITextField。下面是代碼:在CollectionViewCell中輸入UITextField(swift 3 xcode)
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")
}
}
}
我在調用此方法另一個類的按鈕,並且在時刻打印文本字段的當前輸入(其可以是由於在buttonHandler()功能)。問題是,由於某種原因,textField總是返回爲空,我不知道爲什麼。
編輯:
這是函數按下時(按鈕,其功能是在一個單獨的類到文本框)的按鈕調用:
func testButton() {
let test = ClientCell()
test.handler()
}
SOLUTION:
的問題,我當時我正在想要按下按鈕的課程中創建一個我的collectionViewCell的新實例。當函數被調用時,它將是空的。
爲了解決這個問題,我使用NSNotificationCenter每次點擊該按鈕時都發佈一個帖子,並且在發佈帖子時觸發函數的CollectionViewCell類中有觀察者。這是代碼。
功能按下按鈕時調用:
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)
}
你如何使用按鈕操作調用此方法,希望你不會初始化該C在調用按鈕操作方法時再次調用lass對象。共享按鈕操作的代碼。 –
現在就添加它。 – rob8989
非常明顯,它會一直讓你空空如也。因爲您正在初始化單元格並在該類中創建新的文本字段,所以按鈕操作會返回您新創建的文本字段的值。 –