Swift 2.0,UITableView:获取';选中';排

Swift 2.0,UITableView:获取';选中';排,swift,uitableview,delegates,uibutton,swift2,Swift,Uitableview,Delegates,Uibutton,Swift2,我在UIViewController中有一个UITableView。我在这个视图控制器的底部有一个按钮。所有表格单元格都包含一个复选框,它是UIButton和UILabel的子类。按下按钮时,我想获取所有“选中”单元格的标签文本。现在我不能使用CellForRowatineXpath,因为它为不可见的单元格返回一个nil值。因此,我想为我的数据源编制索引。但问题是,由于UIButton没有像UIExtField那样的UIButtonDelegate,我不知道如何捕获按钮单击并为选中复选框的单元格

我在UIViewController中有一个UITableView。我在这个视图控制器的底部有一个按钮。所有表格单元格都包含一个复选框,它是UIButton和UILabel的子类。按下按钮时,我想获取所有“选中”单元格的标签文本。现在我不能使用CellForRowatineXpath,因为它为不可见的单元格返回一个nil值。因此,我想为我的数据源编制索引。但问题是,由于UIButton没有像UIExtField那样的UIButtonDelegate,我不知道如何捕获按钮单击并为选中复选框的单元格存储indexPath行。请帮忙!非常感谢

这是我的复选框代码,供参考

class CheckBox: UIButton {

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
    // Drawing code
}
*/
// images
var checkedImage = UIImage(named: "check")
var unCheckedImage = UIImage(named: "uncheck")

// bool property
var isChecked: Bool = false {
    didSet {
        if isChecked == true {
            self.setImage(checkedImage, forState: .Normal)
        } else {
            self.setImage(unCheckedImage, forState: .Normal)
        }
    }
}

override func awakeFromNib() {
    self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
    self.isChecked = false
}

func buttonClicked(sender: UIButton) {
    if (sender == self) {
        if isChecked == true {
            isChecked = false
        } else {
            isChecked = true
        }
    }
}
}

您已经从
UIButton
子类化了。AFAICS,您需要一个方法调用,以便在按下按钮时能够感知。上有一个方法(也适用于
ui按钮
):

UIControl实现此方法将操作消息转发到 singleton UIApplication对象(在其 sendAction:to:fromSender:forEvent:method)将其分派到 目标,如果没有指定目标,则指向 愿意处理它的响应链。子类可以重写 此方法用于观察或修改动作转发行为。这个 sendActionsForControlEvents的实现:可能会调用此方法 重复,每个指定的控制事件一次


您可以重写该方法,调用super的实现,并让您的观察者/代理知道关联的操作即将执行。

您已经从
UIButton
子类化了。AFAICS,您需要一个方法调用,以便在按下按钮时能够感知。上有一个方法(也适用于
ui按钮
):

UIControl实现此方法将操作消息转发到 singleton UIApplication对象(在其 sendAction:to:fromSender:forEvent:method)将其分派到 目标,如果没有指定目标,则指向 愿意处理它的响应链。子类可以重写 此方法用于观察或修改动作转发行为。这个 sendActionsForControlEvents的实现:可能会调用此方法 重复,每个指定的控制事件一次


您可以重写该方法,调用super的实现,并让您的观察者/代理知道关联的操作即将执行。

您已经从
UIButton
子类化了。AFAICS,您需要一个方法调用,以便在按下按钮时能够感知。上有一个方法(也适用于
ui按钮
):

UIControl实现此方法将操作消息转发到 singleton UIApplication对象(在其 sendAction:to:fromSender:forEvent:method)将其分派到 目标,如果没有指定目标,则指向 愿意处理它的响应链。子类可以重写 此方法用于观察或修改动作转发行为。这个 sendActionsForControlEvents的实现:可能会调用此方法 重复,每个指定的控制事件一次


您可以重写该方法,调用super的实现,并让您的观察者/代理知道关联的操作即将执行。

您已经从
UIButton
子类化了。AFAICS,您需要一个方法调用,以便在按下按钮时能够感知。上有一个方法(也适用于
ui按钮
):

UIControl实现此方法将操作消息转发到 singleton UIApplication对象(在其 sendAction:to:fromSender:forEvent:method)将其分派到 目标,如果没有指定目标,则指向 愿意处理它的响应链。子类可以重写 此方法用于观察或修改动作转发行为。这个 sendActionsForControlEvents的实现:可能会调用此方法 重复,每个指定的控制事件一次


您可以重写该方法,调用super的实现,并让您的观察者/代理知道关联的操作即将执行。

您可以实现tableviewcell。因为您必须在单元格中创建所有元素。在这个单元类中,你必须维护这些变量 var indexofRow//在为UITableView设置单元格时设置此值

override func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell:yourFeedCell=tableView.dequeueReusableCellWithIdentifier(“yourTableCell”)作为!yourFeedCell
cell.indexofRow=indexPath.row;
}
/*你的单元类中的代码*/
//在全球范围内保持一种口述
var listOfCheckedCells=[Int:Bool]()
//布尔属性
已检查变量:Bool=false{
迪塞特{
如果已检查==真{
self.setImage(checkedImage,for状态:。正常)
listOfCheckedCells[self.indexofRow]=true
}否则{
self.setImage(未选中图像,状态:。正常)
listOfCheckedCells[self.indexofRow]=false
}
}

}
您可以实现tableviewcell。因为您必须在单元格中创建所有元素。在这个单元类中,你必须维护这些变量 var indexofRow//在为UITableView设置单元格时设置此值

override func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell:yourFeedCell=tableView.dequeueReusableCellWithIdentifier(“yourTableCell”)作为!yourFeedCell
cell.indexofRow=indexPath.row;
}
/*你的单元类中的代码*/
//在全球范围内保持一种口述
var listOfCheckedCells=[Int:Bool]()
//布尔属性
检查变量:B
func sendAction(_ action: Selector,
             to target: AnyObject?,
       forEvent event: UIEvent?)
var textOfLabels:[NSIndexPath:String]?

func buttonClicked(sender: UIButton) {
    let view = sender.superview!
    let cell = view.superview as! UITableViewCell //or your custom cell name
    let indexPath = itemTable.indexPathForCell(cell)
    if (sender == self) {
        if isChecked == true {
            isChecked = false
            textOfLabels?.updateValue(theLableText, forKey: indexPath)
        } else {
            isChecked = true
            textOfLabels?.removeValueForKey(indexPath)
        }
    }
}