Создание нового текстового поля ячейки UITableView firstResponder - PullRequest
0 голосов
/ 26 февраля 2019

В настоящее время у меня есть табличное представление с ячейками, которые содержат метку и textfield, у меня также есть элемент кнопки + панели, который добавляет новые ячейки.

Я надеюсь достичь, когда пользователь нажимаетПри нажатии кнопки + создается новая ячейка, и текстовое поле этой ячейки автоматически становится первым респондентом.

Ниже приведен мой текущий код для создания новой записи:

    func newNoteline() {
    let entityDescription = NSEntityDescription.entity(forEntityName: "NotebookContentEntity", in: context)

    let item = NotebookContentEntity(entity: entityDescription!, insertInto: context)

    item.notebookEntry = ""
    item.timeOfEntry = timeOutlet.text

    do {

        try context.save()
    } catch {
        print(error)
        return
    }
    loadNotelines()
    }

Я подумал о нескольких способах решения этой проблемы, но без особой удачи заставить их работать, включая использование .tag в текстовом поле, как только оно будет создано - с помощью делегата текстового поля или с помощью * делегата tableView - indexPathForPreferredFocusedView.

Я просто не могу понять, как навести фокус на конкретныйтекстовое поле в ячейке без нажатия пользователем текстового поля.Есть мысли?

1 Ответ

0 голосов
/ 26 февраля 2019

вызов textField. intoFirstResponder () метод должен делать то, что вы ищете.Когда вызывать эту функцию, зависит от вас.например, в приведенном ниже коде на cellForRowAt Я проверил, является ли значение пустым, затем сделаю текущее текстовое поле первым ответчиком.

   class Test: UIViewController{

        var myView: TestView{return view as! TestView}
        unowned var tableView: UITableView {return myView.tableView}
        unowned var button: UIButton {return myView.button}

        var list = [String]()

        override func loadView() {
            view = TestView()
        }

        override func viewDidLoad() {
            super.viewDidLoad()
            for i in 1...10{
                list.append("Test \(i)")
            }
            tableView.dataSource = self
            button.addTarget(self, action: #selector(didSelect(_:)), for: .touchUpInside)
        }

        @objc func didSelect(_ sender: UIButton){
            let indexPath = IndexPath(row: list.count, section: 0)
            list.append("")
            tableView.insertRows(at: [indexPath], with: .automatic)
            tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
        }
    }
    extension Test: UITableViewDataSource{
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return list.count
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "TestViewCell", for: indexPath) as! TestViewCell
            let value = list[indexPath.row]
            cell.textField.text = value
            if value.isEmpty{
                cell.textField.becomeFirstResponder()
            }
            return cell
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...