Ios 从viewcontroller到自定义单元格的即时数据传输
我试图通过在自定义单元格类中设置布尔值来激活自定义单元格中的函数。这是我最好的尝试:Ios 从viewcontroller到自定义单元格的即时数据传输,ios,uitableview,swift,Ios,Uitableview,Swift,我试图通过在自定义单元格类中设置布尔值来激活自定义单元格中的函数。这是我最好的尝试: func blurViewActive(gestureRecognizer:UIGestureRecognizer) { if (gestureRecognizer.state == UIGestureRecognizerState.Began) { println("STATE BEGAN") var point = gestureRecognizer.locatio
func blurViewActive(gestureRecognizer:UIGestureRecognizer) {
if (gestureRecognizer.state == UIGestureRecognizerState.Began) {
println("STATE BEGAN")
var point = gestureRecognizer.locationInView(self.tv)
if let indexPath = self.tv.indexPathForRowAtPoint(point) {
let data = messageList[indexPath.row] as Messages
let mcell: TableViewCell = self.tv.dequeueReusableCellWithIdentifier("cell") as TableViewCell
mcell.read = true
}
}
}
但这不起作用,我真的不知道如何用其他方法来做到这一点
以下是我的自定义单元格类的代码:
class TableViewCell: UITableViewCell, UIGestureRecognizerDelegate {
@IBOutlet weak var labelOutl: UILabel!
var timer = NSTimer()
var counter = 10
var read = Bool()
@IBOutlet weak var dateLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
if read == true{
println("hello")
}
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func timerStarted(){
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update", userInfo: nil, repeats: true)
}
func update(){
println(--counter)
}
}
我的预期结果是,一旦在我的视图控制器中将read设置为“true”,awakeFromNib函数中的函数应该立即执行 这里似乎有一些混淆点
dequeueReusableCellWithIdentifier
返回一个单元格,以便在调用它的表视图中使用。这将是新实例化的单元格或当前未显示在表的任何可见行中的现有单元格。因此,在此单元格上设置read
属性不会立即产生可见效果
如果要访问可见单元格,可以使用cellforrowatinexpath
,但即使如此,对该单元格所做的更改也不一定会更新UI。相反,您可能希望更新支持该单元格的任何模型,并调用reloadRowsAtIndexPaths
来更新特定单元格
此外,只有在创建新单元格时才会调用awakeFromNib。这将是在它从
dequeueReusableCellWithIdentifier
返回之前,因此在您可以对它执行任何操作(如设置其read
属性)之前。因为您使用的是重用标识符,所以表中的每行或每显示的行也不会调用它一次。相反,表视图将为每个可见行创建至少一个单元格,并将它们作为行滚动进入和退出视线时重用。这很方便,因为最小化创建的对象数量有助于减少内存使用并减少可能降低滚动性能的负载。但是,这意味着您的数据源需要准备好在从一行到下一行重复使用这些单元格时更新这些单元格。这有什么不起作用?你的预期结果是什么?您是否尝试过直接调用该函数?@IanMacDonald我的预期结果是,一旦在我的视图控制器中将read设置为“true”,awakeFromNib函数中的函数应该立即执行。请参阅上面的更多信息。您应该重写TableViewCell
func setRead
以完成此操作。更新属性值时,将不会调用您的awakeFromNib
。@IanMacDonald如果您能提供该解决方案的代码,那就太好了。