我使用以下方法创建一个单元格并在其中填充数据(改编自推文应用示例) 现在我想添加一个显示所选事件日期的新标签和一个将执行另一个操作的按钮。 这里有两种方法:
def self.cellForEvent(event, inTableView:tableView)
cell = tableView.dequeueReusableCellWithIdentifier(EventCell::CellId) || EventCell.alloc.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier:CellId)
cell.fillWithEvent(event, inTableView:tableView)
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton
cell
end
将数据填充到单元格中
def fillWithEvent(event, inTableView:tableView)
self.textLabel.text = event.name
puts event.image
unless event.image
self.imageView.image = nil
Dispatch::Queue.concurrent.async do
event_image_data = NSData.alloc.initWithContentsOfURL(NSURL.URLWithString(event.image_url))
if event_image_data
event.image = UIImage.alloc.initWithData(event_image_data)
Dispatch::Queue.main.sync do
self.imageView.image = event.image
tableView.delegate.reloadRowForEvent(event)
end
end
end
else
self.imageView.image = event.image
end
end
答案 0 :(得分:0)
railsdog的建议并非毫无根据。您可以对要编辑的单元格进行@reference,并在以后对其进行更改。但这有点危险 - 很多陷阱:细胞移出屏幕会发生什么?在别处重复使用?棘手。
相反,我建议将一些fillWithEvent:inTableView
代码添加到cellForEvent
方法中,这样您就可以调用tableView.reloadRowsAtIndexPaths:withRowAnimation:
并调用该方法。这将我上面提到的复杂性移到了Cocoa框架的背面,这是一个好东西: - )
缺点是您需要保持indexPath方便(或可计算),并始终牢记与单元格关联的event
是暂时的,因为单元格被重用。上面的代码似乎没有引用event
,这是一件好事!
# in fetchImageForEvent:tableView:
# ...
event.image = UIImage.alloc.initWithData(event_image_data)
Dispatch::Queue.main.sync do
# instead of this:
# self.imageView.image = event.image
# tell the tableView to reload. unfortunately, we don't have the index
# path. not sure how you're calculating it, but if you've got a list of
# events, this should be easy.
# I'm just assuming section 0, row 1 here.
path = NSIndexPath.indexPathWithIndex(0).indexPathByAddingIndex(1)
tableView.reloadRowsAtIndexPaths([path], withRowAnimation:UITableViewRowAnimationAutomatic)
end