【问题标题】:How to reuse a table view cell without overlapping other cells in tableview ios swift如何在不重叠tableview ios swift中的其他单元格的情况下重用表格视图单元格
【发布时间】:2018-07-24 06:19:28
【问题描述】:

当我向下或向上滚动表格视图时,每个单元格中的小部件/数据都会重叠。我正在做的是,我有一个元素数组是wCheckinArray = ["Date", "TextFeild", "TextView", "Check", "Sign"]。现在我正在检查wCheckinArray 中是否有元素"anyElement",然后我在单元格中创建anyElement 并在单元格的内容视图中添加为子视图。

示例:

在 UITableView 的 cellForRowAtIndexPath 方法下:

  let w = wCheckinArray[indexPath.row]
  if w.contains(Date) {
    // make a date picker  and add it as a subview to content view of cell 
  }
    // and so on



真实代码:

var Cell : UITableViewCell?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("cellforrowatindexpathruns")
    var instockSignView : Int = 1
    Cell = tempCheckinTable.dequeueReusableCell(withIdentifier: "tempCheckinCell")! as UITableViewCell

    if wCheckinArray.count == 0 && lCheckinArray.isEmpty {
      print("no textFields in Checkin")
    }
    else 
    {
      print("widget process i in winstock loop")
      let w = wCheckinArray[indexPath.row]

      if w.contains(wTextField)  {
         print("textField was placed")
         newLabel = UITextField(frame: CGRect(x: 10, y: 10, width: 250, height: 30))
         newLabel.textColor = UIColor.gray
         newLabel.tag = widgetTagOk     
         print("You have a instock textLabel with tag \(newLabel.tag)")

         if lCheckinArray.isEmpty || idCheckinArray.count != lCheckinArray.count {
            newLabel.text = " "
         } else {
            newLabel.placeholder = lCheckinArray[indexPath.row]
            newLabel.layer.cornerRadius = 3
            newLabel.layer.borderColor = UIColor.gray.cgColor
            newLabel.layer.borderWidth = 1

            //instockTextField += 1
            widgetTagOk += 1
            print("\(wCheckinArray.count)")
            Cell?.contentView.addSubview(newLabel)
                }
            }

            if w.contains(wTextView) {
                print("textView was placed")
                newTextView = UITextView(frame: CGRect(x:10, y: 35, width: 250, height: 50))
                newTextView.textAlignment = NSTextAlignment.justified
                newTextView.textColor = UIColor.black
                newTextView.backgroundColor = UIColor.white
                newTextView.font = UIFont.systemFont(ofSize: 15)
                newTextView.tag = widgetTagOk //instockTextView

                print("You have a instock textView with tag \(newTextView.tag)")
                if lCheckinArray.isEmpty || idCheckinArray.count != lCheckinArray.count {
                } else {
                    textViewLabel = UILabel(frame: CGRect(x:10, y: 10, width: 250, height: 20))
                    textViewLabel.text = "\(lCheckinArray[indexPath.row]):"
                    textViewLabel.textColor = .black
                    textViewLabel.tag = widgetTagOk
                    print("here is the TextView place text  \(lCheckinArray[indexPath.row])")
                    newTextView.layer.cornerRadius = 3
                    newTextView.layer.borderColor = UIColor.gray.cgColor
                    newTextView.layer.borderWidth = 1
                    widgetTagOk += 1 //instockTextView += 1
                    print("\(wCheckinArray.count)")
                    Cell?.contentView.addSubview(newTextView)
                    Cell?.contentView.addSubview(textViewLabel)

                }
            }

            if w.contains(wSign) { //wInstockArray.contains(wSign) {
                print("sign was place   d")
                newSignView = UIView(frame: CGRect(x:10, y: 35, width: 250, height: 50))
                newSignView.backgroundColor = UIColor.white
                newSignView.tag = instockSignView
                print("You have a instock signView with tag \(newSignView.tag)")
                if lCheckinArray.isEmpty || idCheckinArray.count != lCheckinArray.count {
                    print("signview can nit be added as a widget")
                } else {
                    textViewLabel = UILabel(frame: CGRect(x:10, y: 10, width: 250, height: 20))
                    textViewLabel.text = "\(lCheckinArray[indexPath.row]):"
                    textViewLabel.textColor = .black
                    textViewLabel.tag = widgetTagOk
                    print("here is the TextView place text  \(lCheckinArray[indexPath.row])")
                    newSignView.layer.cornerRadius = 3
                    newSignView.layer.borderColor = UIColor.gray.cgColor
                    newSignView.layer.borderWidth = 1
                    instockSignView += 1
                    print("\(wCheckinArray.count)")
                    print("signview has added as a instock widget")
                    Cell?.contentView.addSubview(newSignView)
                    Cell?.contentView.addSubview(textViewLabel)
                }
            }


            if w.contains(wDate) { //wInstockArray.contains(wSign) {
                print("date was placed")
                newDatePicker = UIDatePicker(frame: CGRect(x:10, y: 35, width: 250, height: 50))
                newDatePicker.backgroundColor = UIColor.white
                newDatePicker.tag = instockSignView
                print("You have a checkin date picker with tag \(newSignView.tag)")
                if lCheckinArray.isEmpty || idCheckinArray.count != lCheckinArray.count {
                    print("date picker can nit be added as a widget")
                } else {
                    textViewLabel = UILabel(frame: CGRect(x:10, y: 10, width: 250, height: 20))
                    textViewLabel.text = "\(lCheckinArray[indexPath.row]):"
                    textViewLabel.textColor = .black
                    textViewLabel.tag = widgetTagOk
                    print("here is the date picker place text  \(lCheckinArray[indexPath.row])")
                    newDatePicker.layer.cornerRadius = 3
                    newDatePicker.layer.borderColor = UIColor.gray.cgColor
                    newDatePicker.layer.borderWidth = 1
                    instockSignView += 1
                    print("\(wCheckinArray.count)")
                    print("date picker has added as a checkin widget")
                    Cell?.contentView.addSubview(newDatePicker)
                    Cell?.contentView.addSubview(textViewLabel)
                }
            }

            // } //for i in instockarr comment bracket
            print("could not add widgets")
            print("here is w id \(idCheckinArray),here is w name: \(wCheckinArray), here is w data \(lCheckinArray)")
        }
    return Cell!
    }


这是我向上或向下滚动 tableView 时 tableView 的外观


我用 Google 搜索的内容

我用谷歌搜索的是This question,这表明我应该check clear graphics context,这是在 Xcode 中默认完成的

还搜索了Here,它建议我更改每个单元格的cell 标识符,我该怎么办?如何更改我在 Xcode 中 Tableview 单元格的 attributes inspector 中提到的单元格标识符。是否有任何解决方案可以以编程方式重用它。

更新

当我从下到上滚动表格视图时,像 textview.tag 或 textfield.tag 这样的小部件的标签正在增加这是我打印文本字段标签的方式

【问题讨论】:

    标签: ios swift uitableview reuseidentifier


    【解决方案1】:

    您最好删除创建子视图的所有子视图。并确保每个元素的 y 位置 不同

    Cell = tempCheckinTable.dequeueReusableCell(withIdentifier: "tempCheckinCell")! as UITableViewCell
    
        for subView in cell.contentView.subviews{
                    subView .removeFromSuperview()
                }
    

    【讨论】:

    • 我应该在哪里称呼它?
    • y 部分是什么意思?我有一个高度为 90 的 ForRow 方法如何定义每个单元格的高度?
    • 您正在创建标签、文本字段、选择器,y 值不应该相同..
    • 你的意思是我的数组中的元素不应该相同以克服任何崩溃?好像不应该有标签,标签,文字,文字?
    • 请看我的问题标签中的更新在增加吗?
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    相关资源
    最近更新 更多