我使用的是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
引用。
这将导致代码总量减少。