![](/img/trans.png)
[英]Custom UIView Subclass's drawRect not being called inside UITableViewCell
[英]Delegate didSet property of UIView not being called inside custom UITableViewCell
在過去的2個小時中,我一直在腦海中head碰碰,試圖解決這個問題,因此,我們將不勝感激。
我正在使用CVCalendar (develop分支),並且試圖將CalendarView
放在自定義UITableViewCell內,以便使它看起來像這樣:
我面臨的問題是,在自定義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
,而不是Delegate
或CVCalendarViewDelegate
(類型別名)。
此外,您的CalendarCell
不符合CVCalendarViewAppearanceDelegate
和CVCalendarViewAnimatorDelegate
。
您必須使您的單元格符合那些協議,才能將它們設置為委托。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.