簡體   English   中英

Swift 2.0,UITableView:獲取“已檢查”行的索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM