将indexpath标记传递给tableview中原型单元格内的按钮

时间:2016-09-28 11:01:02

标签: ios objective-c swift xcode tableview

我在storyboard中创建了一个tableview原型单元格,我在单元格中添加了一个按钮,并将其标记设置为indexpath.row。当我滚动单元格时,tableview顶部的滚动单元格始终将标记设置为零而不是正确的标记。

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("autoLoadReuseIndentifier", forIndexPath: indexPath)

        print("indexpath :\(indexPath.row)")


        cell.contentView.viewWithTag(100)?.layer.cornerRadius = 5
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        let tempDict : NSDictionary = savedCardsArray.objectAtIndex(indexPath.row) as! NSDictionary


        let bankName = cell.contentView.viewWithTag(102) as! UILabel

        deleteButton = cell.contentView.viewWithTag(106) as? UIButton
        deleteButton?.tag = indexPath.row
        deleteButton?.addTarget(self, action: "deleteCard1:", forControlEvents: UIControlEvents.TouchUpInside)
        print("delete button:\(deleteButton)")
       // print("indexpath delete tag :\(deleteButton.tag)")
        if(self.isSetUpAutoloadSelected){
            deleteButton?.hidden = true
        }else{
            deleteButton?.hidden = false
        }
        return cell;
    }

每当我滚动单元格时,删除按钮标记始终设置为零。

3 个答案:

答案 0 :(得分:1)

如果您应该采用其他方式,请使用follow代码并获取indexPath。

func deleteCard1(_ sender:deleteCard) {
     let buttonPosition:CGPoint = sender.convert(CGPointZero, to:self.tableView)
     let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
 }

答案 1 :(得分:0)

  1. 我认为您不需要遵循这种方法,因为首先您在故事板中静态设置按钮标记,然后再次更改它在cellforrowatindexpath中的标记,因此当您滚动时,单元格将永远不会找到带有标记106的按钮。如果你想要遵循这种方法,那么你需要创建customButton并添加类型为NSInteger的变量或任何你想要的变量,并将indexpath.row存储到customButton的变量中。

  2. 另一种方法是创建CustomTableViewCell类并在此自定义Cell类中创建按钮插座,并将indexpath.row设置为按钮标记,如下所示

    CustomCellClassObject.buttonName.tag = indexPath.row

答案 2 :(得分:0)

正如Sumit所说,最好使用自定义单元格并为按钮和标签创建插座,因为使用标签获取子视图将很难维护代码。

此外,您不必创建变量deleteButton,因为我没有看到有效的目的。

将标签分配给按钮并在cellForRowAtIndexPath中添加目标,它应该可以正常工作。