uitableview – 如何使用按钮标签在swift中访问自定义单元格的内容?

前端之家收集整理的这篇文章主要介绍了uitableview – 如何使用按钮标签在swift中访问自定义单元格的内容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序在自定义单元格中有一个自定义按钮.如果你选择的细胞,它将细节视图,这是完美的.如果我在单元格中选择了一个按钮,下面的代码会将单元索引打印到控制台中.

我需要访问所选单元格的内容(使用按钮)并将其添加到数组或字典中.我是新来的,所以很难找出如何访问单元格的内容.我尝试使用didselectrowatindexpath,但我不知道如何强制索引是标签的索引…

所以基本上,如果在每个单元格中有3个单元格的“Dog”,“Cat”,“Bird”作为cell.repeatLabel.text,我选择行1和3(索引0和2)中的按钮,应该将“狗”和“鸟”添加到数组/字典中.

// MARK: - Table View

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
    return postsCollection.count
}

override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("cell",forIndexPath: indexPath) as! CustomCell

    // Configure the cell...
    var currentRepeat = postsCollection[indexPath.row]
    cell.repeatLabel?.text = currentRepeat.product
    cell.repeatCount?.text = "Repeat: " + String(currentRepeat.currentrepeat) + " of " + String(currentRepeat.totalrepeat)

    cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton

    cell.checkButton.tag = indexPath.row;

    cell.checkButton.addTarget(self,action: Selector("selectItem:"),forControlEvents: UIControlEvents.TouchUpInside)


    return cell

}

func selectItem(sender:UIButton){

    println("Selected item in row \(sender.tag)")

 }
选择1.处理委托

处理单元格子视图中发生的事件的正确方法是使用委派.

所以你可以按照以下步骤:

1.在您的类定义之上,在自定义单元格中,使用单个实例方法编写协议:

protocol CustomCellDelegate {
    func cellButtonTapped(cell: CustomCell)
}

2.在你的类定义中,声明一个委托变量,并在委托中调用协议方法

var delegate: CustomCellDelegate?

@IBAction func buttonTapped(sender: AnyObject) {
    delegate?.cellButtonTapped(self)
}

3.符合您的表视图的类中的CustomCellDelegate:

class ViewController: CustomCellDelegate

4.设置单元格的委托

func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell",forIndexPath: indexPath) as CustomCell
    cell.delegate = self

    return cell
}

5.在视图控制器类中实现所需的方法.

编辑:首先定义一个空数组,然后修改它:

private var selectedItems = [String]()

func cellButtonTapped(cell: CustomCell) {
    let indexPath = self.tableView.indexPathForRowAtPoint(cell.center)!
    let selectedItem = items[indexPath.row]

    if let selectedItemIndex = find(selectedItems,selectedItem) {
        selectedItems.removeAtIndex(selectedItemIndex)
    } else {
        selectedItems.append(selectedItem)
    }
}

其中item是我的视图控制器中定义的数组:

private let items = ["Dog","Cat","Elephant","Fox","Ant","Dolphin","Donkey","Horse","Frog","Cow","Goose","Turtle","Sheep"]

选项2.使用闭包处理它

我已经决定回来,向您展示另一种处理这种情况的方式.在这种情况下使用关闭将导致更少的代码,您将实现您的目标.

1.在单元格类中声明一个闭包变量:

var tapped: ((CustomCell) -> Void)?

2.调用按钮处理程序中的关闭.

@IBAction func buttonTapped(sender: AnyObject) {
    tapped?(self)
}

3.在tableView(_:cellForRowAtIndexPath :)中的包含视图控制器类:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell",forIndexPath: indexPath) as! CustomCell       
cell.tapped = { [unowned self] (selectedCell) -> Void in
    let path = tableView.indexPathForRowAtPoint(selectedCell.center)!
    let selectedItem = self.items[path.row]

    println("the selected item is \(selectedItem)")
}

猜你在找的Swift相关文章