我想知道是否可以使UITableViewCell符合协议,并将UITableViewCell设置为委托。原因是,因为当另一个类中的某个值更改时,我希望某些UITableViewCells进行更新,因此我正在考虑使用协议/委托方法进行此操作。但是,到目前为止,我还无法成功将UITableViewCell转换为委托。甚至有可能吗?
这是我到目前为止的代码:
协议
protocol UploadManagerDelegate: AnyObject {
func taskWasUpdated(id: String, value: Double)
}
上传管理器类
public final class UploadingManager {
static var uploadingTasks: Dictionary<String, Double> = [:]
static weak var uploadDelegate: UploadManagerDelegate
static func removeTask(id: String) {
uploadingTasks.removeValue(forKey: id)
}
static func getTask(id: String) -> Double? {
if uploadingTasks[id] == nil {
return nil
} else {
return uploadingTasks[id]
}
}
static func isUploading(id: String) -> Bool {
return (uploadingTasks[id] != nil)
}
static func updateTask(id: String, completion: Double) {
uploadingTasks[id] = completion
uploadDelegate?.taskWasUpdated(id: id, value: completion)
}
}
自定义UITableViewCell类
class TrackCell: UITableViewCell, UploadManagerDelegate {
...
override func awakeFromNib() {
UploadingManager.uploadDelegate = self // Can I do this??
super.awakeFromNib()
}
...
func taskWasUpdated(id: String, value: Double) {
if(audioFile?.trackID == id) {
activityIndicator.setProgress(Float(value), animated: true)
}
}
答案 0 :(得分:0)
是的,您可以按照here的说明进行操作。
但是在执行某些操作之前,您必须考虑一些情况,例如:
所以,我的建议也与在从VC(UploadingManager)更新单元的注释中建议的@Hossam相同。