如何根据标签存储文本

时间:2018-09-24 05:29:22

标签: ios uitableview

如何根据标签存储文本。

我在UITextField中使用了UITableViewCell

我的视图控制器:-

  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
    }

我得到了输出。在第一个单元格中,我在文本字段中键入了一些文本,然后点按“输入”。然后我滚动。那时我发现我键入的文本在其他单元格中可用。如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您不需要使用单元格Float64,因为您正在为每个单元格使用闭包来处理文本字段更新;此闭包将捕获tag,因此您知道要更新的行。可能出现的唯一问题是,是否允许通过单元格移动或通过插入/删除单元格的功能对单元格进行重新排序。在这种情况下,捕获的indexPath将变得无效(这与使用indexPath时遇到的问题相同)。您可以通过在闭包中调用tag来解决此问题,以在闭包执行时获取单元格的索引路径。

滚动时显示文本的原因是因为单元格对象被重复使用,并且您未明确设置文本字段文本。

最后,您可以避免整个indexPath(for:)的跳动,因为释放视图控制器时,将释放表视图,这意味着将释放单元格。通过使用闭包,您没有保留周期。

weak self

注意,您还没有提供有关如何更新模型对象的详细信息,因此我插入了一个函数调用来显示该想法。

我还建议您阅读Swift约定。使用大写字母表示参数名称以及使用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 } 作为类前缀不是“ Swifty”