[英]Swift 2.0, UITableView: Fetch index of 'checked' rows
我在UIViewController中有一個UITableView。 我在此視圖控制器的底部有一個按鈕。 所有表單元格都包含一個復選框,該復選框是UIButton和UILabel的子類。 當按下按鈕時,我想獲取所有“選中”單元格的標簽文本。 現在,我不能使用cellForRowAtIndexPath,因為它為不可見的單元格返回nil值。 因此,我想索引我的數據源。 但是問題是,因為UIButton沒有像UITextfield這樣的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
}
}
}
}
您可以實現tableviewcell。 為此,您必須在單元格中創建所有元素。 在該單元格類中,您必須維護此變量var indexofRow // //在為UITableView設置單元格時進行設置。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - > UITableViewCell { let cell: yourFeedCell = tableView.dequeueReusableCellWithIdentifier("yourTableCell") as!yourFeedCell cell.indexofRow = indexPath.row; } /*Code in you cell class*/ //Maintain one dictonary Globally var listOfCheckedCells = [Int: Bool]() // bool property var isChecked: Bool = false { didSet { if isChecked == true { self.setImage(checkedImage, forState: .Normal) listOfCheckedCells[self.indexofRow] = true } else { self.setImage(unCheckedImage, forState: .Normal) listOfCheckedCells[self.indexofRow] = false } } }
希望這會有所幫助
您已經從UIButton
了子類。 AFAICS,您需要一個方法調用來知道何時按下按鈕。 UIControl上有一個方法(也適用於UIButton
):
func sendAction(_ action: Selector,
to target: AnyObject?,
forEvent event: UIEvent?)
UIControl實現此方法以將操作消息轉發到單例UIApplication對象(在其sendAction:to:fromSender:forEvent:方法中),以將其分派到目標,或者如果沒有指定目標,則分派到響應者鏈中的第一個對象願意處理它。 子類可以重寫此方法以觀察或修改動作轉發行為。 sendActionsForControlEvents:的實現可能會對每個指定的控制事件重復調用此方法一次。
您可以重寫該方法,調用super的實現,並讓您的觀察者/代表知道將要執行關聯的操作。
表格視圖單元格僅在可見時才被填充,因此,如果您要保存單元格的值並在其不可見時保留它,請創建一個索引路徑為鍵且單元格內容為值的字典。 然后,只需選中和取消選中復選框即可更新字典。 最后,當單擊“視圖底部的按鈕”時,從字典中獲取數據。 這有點樣本
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)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.