带可编辑单元格图形的UITableView

时间:2015-07-20 16:38:35

标签: ios xcode swift uitableview

我在xCode 7 Beta / Swift工作。我在故事板中的UITableView内创建了UIViewController。我有一个实现UITableViewDelegateUITableViewDataSource协议的控制器。

在故事板中,只有一个原型单元格。它只有一个子视图,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来检查它是否被调用,因为按下了按钮,或者是否因为需要生成新的单元而调用它。

这不起作用。单元格似乎不记得其先前添加的子视图。

两个问题:

  1. 编辑tableview单元格的UI的最佳方法是什么 单击该单元格中的按钮?
  2. 如何在tableView中布置原始图像(在按下任何按钮之前)单元格 信息只能在控制器中访问?

2 个答案:

答案 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)变量,以确保在必须重绘时单元格正确播放。