У меня есть UITextField, который я добавил в подзаголовок моей коллекцииViewCell. Вот код:Вход UITextField в CollectionViewCell (быстрый x xode)
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 по какой-то причине возвращается как пустой, и я не уверен, почему.
EDIT:
это функция кнопки вызовов при нажатии (кнопка и ее функция в отдельном классе к TextField):
func testButton() {
let test = ClientCell()
test.handler()
}
РЕШЕНИЕ:
Проблемы я было то, что я делал новый экземпляр моего collectionViewCell в классе, где я хотел, чтобы кнопка была нажата. Когда функция была вызвана, она была бы пустой.
Чтобы решить эту проблему, я использовал NSNotificationCenter, чтобы делать сообщение каждый раз, когда кнопка была нажата, и наблюдатели в классе CollectionViewCell запускали функцию при создании сообщения. Вот код.
функция вызывается при нажатии кнопки:
func saveData() {
NotificationCenter.default.post(name: NSNotification.Name("saveProject"), object: nil)
}
код внутри viewDidLoad из 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)
}
Как вы вызывающему этот метод с помощью кнопки действия, надеюсь, что вы не инициализации этого гр lass object снова при вызове метода действия кнопки. Поделиться кодом действия кнопки. –
Просто добавил его сейчас. – rob8989
так очень очевидно, он всегда будет возвращать вас пустым. Поскольку вы инициализируете ячейку и создаете новое текстовое поле в этом классе, действие кнопки возвращает значение вновь созданного текстового поля. –