如何以编程方式向UITableView行添加按钮?

时间:2015-11-14 22:30:03

标签: ios swift

我正在尝试向UITableView行添加一个按钮,该行将通过NSURL会话与MySQL数据库进行交互。我已经成功地将按钮添加到空白视图控制器,但是当与UITableView单元重复时它不起作用。没有错误给代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
    cell.textLabel?.text = self.textArray.objectAtIndex(indexPath.row) as? String

    let button = UIButton(type: UIButtonType.System)
    button.frame = CGRectMake(100, 100, 120, 50)
    button.backgroundColor = UIColor.greenColor()
    button.setTitle("Test Button", forState: UIControlState.Normal)
    button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

    cell.addSubview(button)


    return cell
}

1 个答案:

答案 0 :(得分:3)

您的方法存在两个问题:

  1. 当您将子视图添加到UITableViewCell时,您应该将它们添加到单元格contentView,而不是直接添加到单元格。

  2. 正在重复使用Cell。当用户滚动并且单元格不再可见时,它将被添加到表格视图的单元格队列中。然后,当表需要显示一个新单元时,它会从该队列中出列旧单元并再次显示它。因为早先已经显示过单元格,所以它已经有一个按钮。但是你要在单元格中添加另一个按钮。即使它已经有一个按钮。因此,在添加按钮之前,您应该检查单元格是否已有按钮。但是,更好的方法是创建自己的UITableViewCell子类,并在单元格的初始化程序中添加按钮。

  3. 只需仔细检查:你确定你的手机足够高以显示按钮吗?您在按钮上设置的框架需要一个高度至少为150的单元格。