我在xCode 7 Beta / Swift工作。我在故事板中的UITableView
内创建了UIViewController
。我有一个实现UITableViewDelegate
和UITableViewDataSource
协议的控制器。
在故事板中,只有一个原型单元格。它只有一个子视图,UIScrollView
。在控制器中,我需要向此滚动视图添加图像。根据单元格,需要添加可变数量的图像。我还需要在scrollview外面的单元格中添加一个按钮。按下此按钮后,我需要在滚动视图中添加或删除图像,然后将按钮更改为其他按钮。
目前,我正在func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
中实施所有这些功能。按下按钮后,我将self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
调用按下该按钮的行。我在if-else
内部有一个巨大的func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
来检查它是否被调用,因为按下了按钮,或者是否因为需要生成新的单元而调用它。
这不起作用。单元格似乎不记得其先前添加的子视图。
两个问题:
答案 0 :(得分:1)
如果您在UITableView中重复使用单元格,则屏幕上保留的单元格不会保留更改。它们将被擦除,一旦您再次滚动它,单元格将被重新加载为“默认”。如果你在想'重用'时我想知道我的意思,我指的是使用以下选择器获取单元格:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath];
// Configure Cell
return cell;
}
选择器dequeueReusableCellWithIdentifier
表示它将重用或回收单元格以节省内存。
在UITableViewCell中拥有一大堆图像和按钮是一个问题。要解决您的问题,我不建议禁用dequeue
方法,而是创建一个数组或对象类型,用于保存单元格信息。
这将允许您在单元格不存在时存储信息,然后使用tableView行索引获取它,并将其显示在单元格中。
答案 1 :(得分:0)
感谢您的帮助。我能够通过从按钮的目标函数中更新单元格UI来解决这个问题:
let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tableView)
if let indexPath = self.tableView.indexPathForRowAtPoint(buttonPosition) {
self.eventsUserJoined[indexPath.row] = false
let cell = tableView.cellForRowAtIndexPath(indexPath) as! NewsFeedCell
}
然后我使用此引用来更新其子视图。我还存储了一个全局指示符(self.eventsUserJoined
)变量,以确保在必须重绘时单元格正确播放。