程序初始化的UITableViewController的一个自定义子类tableviewcell
问题描述:
ENV:xcode6,迅速程序初始化的UITableViewController的一个自定义子类tableviewcell
我试图用SLPagingViewSwift作为rootcontroller,并在页面中的一个,我想用一个自定义的UITableViewController。
我不知道为什么它不工作,总是抛出“2015-02-06 23:03:18.228 xiaoyu [4825:46536]由于未捕获的异常'NSInternalInconsistencyException',终止应用程序,原因:'无法退出具有标识符PersonCell的单元格 - 必须为该标识符注册一个笔尖或类别,或者在故事板“”中连接原型单元格,并且我已经在故事板中将标识符定义为'PersonCell'。
这里是主controlelr代码:
var controller: SLPagingViewSwift?
var ctr1 = PersonTableViewController()
var ctr2 = UIViewController()
var ctr3 = UIViewController()
override func viewDidLoad() {
super.viewDidLoad()
var navTitleLabel1 = UILabel()
navTitleLabel1.text = "Home"
navTitleLabel1.font = UIFont(name: "Helvetica", size: 20)
navTitleLabel1.textColor = UIColor.whiteColor()
var navTitleLabel2 = UILabel()
navTitleLabel2.text = "Discover"
navTitleLabel2.font = UIFont(name: "Helvetica", size: 20)
navTitleLabel2.textColor = UIColor.whiteColor()
var navTitleLabel3 = UILabel()
navTitleLabel3.text = "Activity"
navTitleLabel3.font = UIFont(name: "Helvetica", size: 20)
navTitleLabel3.textColor = UIColor.whiteColor()
var orange = UIColor(red: 255/255, green: 69.0/255, blue: 0.0/255, alpha: 1.0)
var gray = UIColor(red: 0.84, green: 0.84, blue: 0.84, alpha: 1.0)
ctr1.title = "Ctr1"
ctr1.view.backgroundColor = UIColor.whiteColor()
ctr2.title = "Ctr2"
ctr2.view.backgroundColor = UIColor.yellowColor()
ctr3.title = "Ctr3"
ctr3.view.backgroundColor = UIColor.blueColor()
controller = SLPagingViewSwift(items: [navTitleLabel1, navTitleLabel2, navTitleLabel3], controllers: [ctr1,ctr2,ctr3], showPageControl: false)
controller?.currentPageControlColor = UIColor.whiteColor()
controller?.tintPageControlColor = UIColor(white: 0.799, alpha: 1.0)
controller?.pagingViewMoving = ({ subviews in
for v in subviews {
var lbl = v as UILabel
var c = gray
if(lbl.frame.origin.x > 45 && lbl.frame.origin.x < 145) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(46), bottomX: Double(144), initC: orange, goal: gray)
}
else if (lbl.frame.origin.x > 145 && lbl.frame.origin.x < 245) {
c = self.gradient(Double(lbl.frame.origin.x), topX: Double(146), bottomX: Double(244), initC: gray, goal: orange)
}
else if(lbl.frame.origin.x == 145){
c = orange
}
lbl.textColor = c
}
})
controller?.didChangedPage = ({ currentIndex in
println(currentIndex)
})
self.setViewControllers([controller!], animated: true)
}
PersonTableViewController是自定义TableViewController,并在控制器,我使用自定义tableviewcell。
下面是代码为PersonTableViewController:
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("PersonCell", forIndexPath: indexPath) as PersonTableViewCell
cell.name.text = "aaa"
return cell
}
答
你
方法viewDidLoad
应与表视图寄存器细胞类。的UITableViewController
方法是:
func registerClass(_ cellClass: AnyClass,forCellReuseIdentifier identifier: String)
所以,你的情况应该是:
ctr1.registerClass(PersonTableViewCell.self, forCellReuseIdentifier: "PersonCell")
有没有从你的tableview包含PersonCell到你的表视图的出口(在故事板)试图离开? – timgcarlson 2015-02-06 15:42:30
是的。事情是,如果我不使用SLPagingViewSwift作为根控制器,它可以正常工作,这意味着我的自定义PersonTableViewController由故事板初始化,而不是由我自己初始化。 – des 2015-02-07 01:49:14