我使用的是tableView,里面有UIImage、UILabel和floatingview。
FloatRatingView是一个UIView,一个星级,你可以给它打分1-5。
所以tableView有多个单元格,我想在按下floatingview时获得电影标题。
FloatRatingView有两个委托方法。

    func floatRatingView(ratingView: FloatRatingView, didUpdate rating: Float) {
    }
    func floatRatingView(ratingView: FloatRatingView, isUpdating rating: Float) {

    }

到目前为止,在我的自定义表格单元格中,我有:
var delegate: FloatRatingViewDelegate?
 @IBOutlet weak var userRating: FloatRatingView!{
        didSet {
            if userRating.rating>0 {
            self.delegate!.floatRatingView(userRating, didUpdate: userRating.rating)
        }}
    }

在TableViewController中:
class MoviesViewController: PFQueryTableViewController ,FloatRatingViewDelegate {



func floatRatingView(ratingView: FloatRatingView, isUpdating rating: Float) {
        print("is updating")

    }
    func floatRatingView(ratingView: FloatRatingView, didUpdate rating: Float) {
        print("did update")
    }


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {

        let cellIdentifier:String = "cell"

        var cell:TableCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? TableCell

        if(cell == nil) {
            cell = TableCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)
        }
        cell?.delegate = self

最佳答案

假设FloatRatingView在细胞内,最简单的方法是:
将委托协议添加到单元格类中,在类中实现FloatRatingViewDelegate,并将回调转发到单元格委托。在视图控制器中实现单元格委托。
公开cell类的FloatRatingView属性,并将其委托直接设置到视图控制器(需要实现FloatRatingViewDelegate)。在可见单元格上迭代,找到float rating视图所在的单元格。
然而,更现代的解决方案是:
将委托协议替换为函数属性(var didUpdate: (Float -> Void)?),在单元格出列时在视图控制器中设置这些属性。在那里,您可以直接关闭indexPath引用。
这将导致代码总量减少。

10-08 06:12