以编程方式将UIbutton添加到表格视图内的单元格中。滚动后将数据与其他单元格合并

时间:2018-07-27 22:56:07

标签: ios swift uitableview

在首次构建应用程序时,似乎工作正常,请在表视图enter image description here enter image description here enter image description here中查看其中每个图片是一个单元格的图片。 (我正在努力正确放置它们) 我面临的问题是:一旦向下滚动并再次向上滚动。每个单元格数据都得到了汇总。请看图片。经过数小时的在线搜索和解码后,我仍然不知道编码器有什么问题。请指出我所缺少的。我已附上我的代码。 我正在使用Ray Wenderlich中的教程代码,并在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell方法中添加了以下代码。是的,我将每个单词都用作UIBotton来触发操作。  添加

 "cell.contentView.subviews.filter { $0 is UILabel }.forEach { $0.removeFromSuperview() }"

无法解决问题。请给我一个完整的例子吗?(工作一个)谢谢。

enter image description here

 let wholeSentense = artist.bio
    let whoeSentenseArray = wholeSentense.components(separatedBy: " ")
    var xPos = CGFloat(0)
    for element in whoeSentenseArray {
    var button = UIButton()
    button.setTitle(element, for: UIControlState.normal)
    button.titleLabel?.font = UIFont.systemFont(ofSize: 15)


    let buttonTitleSize = (element as NSString).size(attributes: [NSFontAttributeName : UIFont.boldSystemFont(ofSize: 15 + 1)])
    button.frame.size.height = buttonTitleSize.height * 1.5
    button.frame.size.width = buttonTitleSize.width
    button.frame.origin.x  += xPos
    xPos = xPos + buttonTitleSize.width + 10


    button.setTitleColor(UIColor.black, for: .normal)
    button.addTarget(self, action: #selector(buttonAction), for: UIControlEvents.touchDown)
    cell.addSubview(button)

    }


    return cell
  }
  func buttonAction(sender: UIButton!) {
    print("\n\n Title  \(String(describing: sender.titleLabel?.text))  TagNum    \(sender.tag)")
   // print("Button tapped")
  }

enter image description here enter image description here


1 个答案:

答案 0 :(得分:1)

我认为您最好将此复杂的逻辑移至UITableViewCell子类中。这是一个粗糙的骨架:

class MyCustomTableViewCell : UITableViewCell {
    @IBOutlet var imageView: UIImageView!
    var sentence: String! {
        didSet { <add your logic here> }
    }
}

SO和其他网站上有很多有关如何创建自定义表格视图单元格的资源,例如this

无论如何,无论选择哪种方式,都需要注意表视图单元已被重用。您需要先删除所有标签,然后再添加它们:

cell.contentView.subviews.filter { $0 is UILabel }.forEach { $0.removeFromSuperview() }