在tableviewcell

时间:2018-02-13 00:29:39

标签: swift uitableview disclosure

我试图控制单元格中是否存在自定义披露指标。我特意尝试使用具有自定义位置的那个(在我的自定义tableview单元类中):

  

TableViewCell disclosure indicator position

我试图控制它是否出现在我的手机中,但由于我使用自定义的tableview单元格,对我来说这很困难。为此,以下是我使用的帖子中的代码:

class CellSubclass: UITableViewCell {

    var accessoryButton: UIButton?

    override func awakeFromNib() {
        super.awakeFromNib()
        accessoryType = .DisclosureIndicator
        accessoryButton = subviews.flatMap { $0 as? UIButton }.first
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        accessoryButton?.frame.origin.y = 15
    }
}

这是我自定义的tableview单元类,其中包含了代码:

protocol MainTableViewCellDelegate {
    func tappedReport(id: String)
    func cell(_ cell: MainTableViewCell, didTapReport reportID: String)

}

class MainTableViewCell: UITableViewCell {

    @IBOutlet weak var cellView: UIView!
    @IBOutlet weak var userLabel: UILabel!
    @IBOutlet weak var timeLabel: UILabel!
    @IBOutlet weak var postLabel: UILabel!
    var accessoryButton: UIButton?

    var postItem: PostData!
    var delegate: MainTableViewCellDelegate?
    override func awakeFromNib() {
        accessoryType = .disclosureIndicator
        accessoryButton = subviews.flatMap { $0 as? UIButton }.first
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        accessoryButton?.frame.origin.y = 15
    }

    func setPost(post: PostData) {
        postItem = post
        let ourPost = postItem.postId
        print(ourPost)
    }


    @IBAction func reportButton(_ sender: UIButton) {
        delegate?.tappedReport(id: "3")
        delegate?.cell(self, didTapReport: "Test")
    }

}

现在,在cellForRowAt方法的tableview中,如何打开/关闭此功能?它在每个细胞中显示都很好,但是我无法想出如何制作一个协议或类似的东西来控制它何时出现并且不会...提前感谢您的帮助! (我在cellForRowAt方法中执行此操作的原因是因为我无法同时将我的ViewController作为UITableViewCellUIViewController的子类)

1 个答案:

答案 0 :(得分:1)

我看到了两种实现方式:

  1. 在cellForRowAt方法中,您可以调用accessoryButton.isHidden = true或false
  2. 更喜欢的方式 - 使用箭头图像创建您自己的自定义UIButton并将其放在披露指示器的位置。并通过isHidden标志设置可见性。