2017-01-13 7 views
0

Я делаю планировщик, используя табличный вид. Когда пользователь нажимает клавишу ввода после ввода задания, кнопка должна появиться слева от задачи.Как добавить subview в UITableViewCell

Метод TextFieldShouldReturn в моем классе ViewController добавляет кнопку, но не всегда в левом верхнем углу экрана. Я его настроить так:

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 


    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell 

     self.view.addSubview(cell.cellButton) // puts a button in a wrong location, button doesn't respond to any action 
     cell.addSubview(cell.cellButton) 
     tableViewData.append(textField.text!) 
     lastItem = tableViewData.count 
     print(tableViewData) 
     print(lastItem) 

    self.tableView.reloadData() //update row count and array count 
    textField.resignFirstResponder() 
    return true 

}

self.view.addSubview(cell.cellButton) 

добавляет кнопку к просмотру, но кнопка не появляется в нужном месте (я пытался переместить местоположение с помощью раскадровки, но он ничего не делает). Кроме того, кнопка не отвечает на соответствующее действие клика, которое объявлено в подклассе.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell 
    cell.textField.delegate = self 
    ... 
    return cell 
} 

Любая помощь приветствуется. Дайте мне знать, если я не слишком ясен.

ответ

0

Было бы проще, если бы вы выровняли кнопку в файле .xib или раскадровки, а затем сохранили ее, пока она не понадобилась, чтобы она появилась?

1

Вы не захватывая правую ячейку в этой строке:

let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell 

Вы в основном говорите систему, чтобы просто дать вам ячейку. Вам нужно выяснить, какое текстовое поле действительно было возвращено, и захватить ячейку, которая содержит это текстовое поле, а затем добавить ваше подпрос в правую ячейку. Для этого нужно пометить ваш textFields номером строки.

Он работает в первом примере, потому что вы находитесь в cellForRow, поэтому у вас есть правая ячейка.

+0

Хмм вы могли бы дать некоторый код/​​псевдокод о том, как это сделать? Я использую только один экземпляр textField для практически всех строк, который, кажется, работает нормально – brownmamba

+0

Поделитесь больше кода? Я думаю, что вы ошибаетесь, каждая ячейка должна иметь собственный экземпляр текстового поля. Возможно, вам не хватает ключевых понятий о том, как ячейки повторно используются и как они работают. Попробуйте поставить точку останова в методе делегата, и вы увидите, что тект-поля различны. – JDM

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