簡體   English   中英

委托UIView的didSet屬性未在自定義UITableViewCell中調用

[英]Delegate didSet property of UIView not being called inside custom UITableViewCell

在過去的2個小時中,我一直在腦海中head碰碰,試圖解決這個問題,因此,我們將不勝感激。

我正在使用CVCalendar (develop分支),並且試圖將CalendarView放在自定義UITableViewCell內,以便使它看起來像這樣:

fullpixels

我面臨的問題是,在自定義UITableViewCell內調用self.calendarView.calendarDelegate = self時,它沒有設置委托屬性。

我知道它沒有被設置,因為我已將println放置在未輸出的委托didSet屬性中。

這是CalendarView內的CalendarViewDelegate出口

// MARK: - Calendar View Delegate

@IBOutlet weak var calendarDelegate: AnyObject? {
    set {
        if let calendarDelegate = newValue as? Delegate {
            delegate = calendarDelegate
            println("delegate did set property called")
        }
    }

    get {
        return delegate
    }
}

這是我正在使用的自定義UITableViewCell的代碼。

import UIKit

class CalendarCell: UITableViewCell {

    var calendarView: CVCalendarView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        backgroundColor = UIColor.redColor()
        selectionStyle = .None

        self.calendarView = CVCalendarView(frame: self.frame)
        self.calendarView.calendarDelegate = self
        self.calendarView.calendarAppearanceDelegate = self
        self.calendarView.animatorDelegate = self
        contentView.addSubview(calendarView)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.calendarView.commitCalendarViewUpdate()
    }
}

這是我的UITableViewController代碼:

import UIKit

class CalendarTableViewController: UITableViewController {

    @IBOutlet var myTableView: UITableView!

    var items = ["Apple", "Banana"];

    override func viewDidLoad() {
        super.viewDidLoad()

        self.myTableView.registerClass(CalendarCell.self, forCellReuseIdentifier: NSStringFromClass(CalendarCell))
        self.myTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        self.myTableView.dataSource = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func creatHeaderCell() -> UITableViewCell {
        var headerCell = self.myTableView.dequeueReusableCellWithIdentifier(NSStringFromClass(CalendarCell)) as! CalendarCell
        return headerCell
    }

    // MARK: - Table view data source

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if (indexPath.section == 0) {
            return 300
        }

        return 44
    }

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch (section) {
        case 0:
            return 1
        default:
            return items.count
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        if (indexPath.section == 0) {
            return self.creatHeaderCell()
        }

        let cell = self.myTableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
        cell.textLabel!.text = "Thomas"

        // Configure the cell...

        return cell
    }
}

您的println語句可能未達到,因為您的if條件if let calendarDelegate = newValue as? Delegate if let calendarDelegate = newValue as? Delegate不正確,因為您作為calenderDelegate傳入的是CalenderCell ,而不是DelegateCVCalendarViewDelegate (類型別名)。

此外,您的CalendarCell不符合CVCalendarViewAppearanceDelegateCVCalendarViewAnimatorDelegate

您必須使您的單元格符合那些協議,才能將它們設置為委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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