2017-02-08 18 views
0

У меня есть 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) 
} 
+0

Как вы вызывающему этот метод с помощью кнопки действия, надеюсь, что вы не инициализации этого гр lass object снова при вызове метода действия кнопки. Поделиться кодом действия кнопки. –

+0

Просто добавил его сейчас. – rob8989

+0

так очень очевидно, он всегда будет возвращать вас пустым. Поскольку вы инициализируете ячейку и создаете новое текстовое поле в этом классе, действие кнопки возвращает значение вновь созданного текстового поля. –

ответ

0

I поместите свой код в проект 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. (Из-за этого печать «печать (textFieldInput)»)

В противном случае есть некоторые вещи, чтобы исправить в коде:

1) В функции «basicTextField»: вам нужно указать рамку TextField

let textField = UITextField(frame: YOUR_DESIRED_FRAME) 

2) в функции «setupViews» вы должны добавить TextField содержательная Вид на мобильный:

contentView.addSubview(textField) 
+0

Но разве я не должен получать результат ввода пользователя? Когда я запускаю свое приложение, я помещаю строку в текстовое поле, нажимаю кнопку и получаю именно ту «опциональную (« ») в консоли. Я думал, что это будет печатать вкладки пользователей. – rob8989

+0

в вашем «testButton()» вы должны использовать ClientCell (фрейм :) инициализатор для настройки вида ячеек –

 Смежные вопросы

  • Нет связанных вопросов^_^