Swift 2.0,UITableView:获取';选中';排
我在UIViewController中有一个UITableView。我在这个视图控制器的底部有一个按钮。所有表格单元格都包含一个复选框,它是UIButton和UILabel的子类。按下按钮时,我想获取所有“选中”单元格的标签文本。现在我不能使用CellForRowatineXpath,因为它为不可见的单元格返回一个nil值。因此,我想为我的数据源编制索引。但问题是,由于UIButton没有像UIExtField那样的UIButtonDelegate,我不知道如何捕获按钮单击并为选中复选框的单元格存储indexPath行。请帮忙!非常感谢 这是我的复选框代码,供参考Swift 2.0,UITableView:获取';选中';排,swift,uitableview,delegates,uibutton,swift2,Swift,Uitableview,Delegates,Uibutton,Swift2,我在UIViewController中有一个UITableView。我在这个视图控制器的底部有一个按钮。所有表格单元格都包含一个复选框,它是UIButton和UILabel的子类。按下按钮时,我想获取所有“选中”单元格的标签文本。现在我不能使用CellForRowatineXpath,因为它为不可见的单元格返回一个nil值。因此,我想为我的数据源编制索引。但问题是,由于UIButton没有像UIExtField那样的UIButtonDelegate,我不知道如何捕获按钮单击并为选中复选框的单元格
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)
}
}
}