Как сохранить текст на основе тега

Как сохранить текст на основе тега.

Я использовал UITextField в UITableViewCell.

Мой viewcontroller: -

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let identifier = "Cell"
        var cell: NH_QuestionListCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_QuestionListCell

        if cell == nil {
            tableView.register(UINib(nibName: "NH_QuestionListCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_QuestionListCell
        }
        cell.contentView.backgroundColor = UIColor.clear

        cell.textadd = {[weak self] in

                if let i = self?.tableview.indexPath(for: $0) {

                    print("the selected text\(cell.textname ?? "")")

                    print(i)

                    print("the Selected button is \(cell.textname ?? "")")

                    print(i)

                    cell.setText(Options:(self?.questionViewModel.datafordisplay(atindex: indexPath))!)                     

                    let model = self?.questionViewModel.datafordisplay(atindex: indexPath)
                    print(model?.values ?? "")

                    if model?.isSelected == true{

                     cell.texttype.tag = indexPath.row
                   //  cell.texttype.text = questionViewModel.datafordisplay(atindex: indexPath)

      }
      return cell

}

Tableviewcell: -

 @IBOutlet weak var texttype: UITextField!
    var textname:String?

    var textadd : ((NH_QuestionListCell) -> Void)?
    @IBAction func TextAction(_ sender: UITextField) {

         print(texttype.text)
            //    self.question.text = texttype.text

        let index = texttype.tag
        self.textname = texttype.text          

        self.textname = texttype.text
        print(self.textname)
                print(texttype.text)
             textadd?(self)
    }

    func setText(Options:NH_OptionsModel)     
    {
        self.displaySmiley.isHidden = true
        self.viewdisplay.isHidden = false
        self.imagebutton.isHidden = true
        self.question.isHidden = true
        self.displayRatingView.isHidden = true

        print(Options.values)
        Options.values = self.textname
        print(Options.values)     
    }

     func textFieldDidBeginEditing(_ textField: UITextField) {
       texttype.text = ""    
    }

    func textFieldShouldClear(_ textField: UITextField) -> Bool
    {
               return true
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
          self.TextAction(texttype)          
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {         
        return true;
    }      

    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {           
        return true;       
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print(texttype.text)

        texttype.resignFirstResponder()

        return true
    }

Получил вывод. В первой ячейке я ввел текст в текстовое поле и нажал «ввести». Потом я пролистал. В то время я обнаружил, что набранный мной текст доступен в других ячейках. Как исправить эту проблему?

как исправить проблемы?

meggie 24.09.2018 07:41

Непонятно, о чем вы спрашиваете, и код очень неорганизован.

Rigo 24.09.2018 07:42

@Rigo Я закодировал таким образом, поэтому теперь мой вопрос: сначала я ввожу один текст в текстовое поле, после этого в следующей ячейке мне нужно было ввести текст, но здесь отображается текст первой ячейки во второй ячейке. при прокрутке в каждой ячейке отображается один и тот же текст. Как это исправить?

meggie 24.09.2018 07:50

@Rigo как решить проблему?

meggie 24.09.2018 07:54
stackoverflow.com/questions/49791041/…
karthikeyan 24.09.2018 08:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
54
1

Ответы 1

Вам не нужно использовать ячейку tag, поскольку вы используете закрытие для каждой ячейки для обработки обновления текстового поля; Это закрытие захватит indexPath, поэтому вы знаете, какую строку вы обновляете. Единственная проблема, которая может возникнуть, - это если вы разрешаете переупорядочивание ячеек либо посредством перемещения ячеек, либо с помощью возможности вставлять / удалять ячейки. В этом случае захваченный indexPath станет недействительным (это та же проблема, что и при использовании tag). Вы можете решить эту проблему, вызвав indexPath(for:) в закрытии, чтобы получить индексный путь ячейки при выполнении закрытия.

Причина появления текста при прокрутке заключается в том, что объекты ячеек используются повторно, а текст текстового поля не устанавливается явно.

Наконец, вы можете избежать всего танца weak self, поскольку, когда контроллер представления освобождается, представление таблицы будет освобождено, что означает освобождение ячеек. У вас нет цикла удержания, хотя и используется закрытие.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let identifier = "Cell"
        var cell: NH_QuestionListCell! = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_QuestionListCell

        if cell == nil {
            tableView.register(UINib(nibName: "NH_QuestionListCell", bundle: nil), forCellReuseIdentifier: identifier)
            cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? NH_QuestionListCell
        }
        cell.contentView.backgroundColor = UIColor.clear
        cell.setText(options: self.questionViewModel.datafordisplay(atindex: indexPath))

        cell.textadd = {

                self.questionViewModel.setData(atIndex: indexPath,text: cell.textName)
        }
      return cell

}

Обратите внимание, что вы не предоставили подробностей о том, как следует обновлять объект вашей модели, поэтому я вставил вызов функции, чтобы показать идею.

Я также предлагаю вам прочитать о соглашениях Swift. Использование заглавных букв в именах параметров и использование NH_ в качестве префикса класса - это не «Swifty».

что писать в setData?

meggie 24.09.2018 08:46

Предположительно вы хотите обновить свою модель текстом, введенным пользователем?

Paulw11 24.09.2018 08:46

Я обновил метод didselect. что делать в модели просмотра

meggie 24.09.2018 09:17

Другие вопросы по теме