环境:xcode6,swift
我正在尝试使用 SLPagingViewSwift作为根 Controller ,在其中一个页面中,我想使用自定义 UITableViewController。
我不知道为什么它不起作用,总是抛出“2015-02-06 23:03:18.228 xiaoyu[4825:46536] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to使具有标识符 PersonCell 的单元格出列 - 必须为该标识符注册一个 nib 或一个类,或者在 Storyboard中连接一个原型(prototype)单元格”,并且我已经在 Storyboard中将标识符定义为“PersonCell”。
这里是主 Controller 的代码:
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,在该 Controller 中,我使用了自定义的 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
方法应该向 TableView 注册单元格类。 UITableViewController
的方法是:
func registerClass(_ cellClass: AnyClass,forCellReuseIdentifier identifier: String)
因此,在您的情况下,它将是:
ctr1.registerClass(PersonTableViewCell.self, forCellReuseIdentifier: "PersonCell")
关于ios - 使用自定义 tableviewcell 以编程方式初始化 UITableViewController 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369292/