我有一个简单的UITableViewController
有3个部分,每个部分有3行。我已经分配了每个cell
reuse identifier
。
当我运行代码时,我在返回EXE_BAD_INSTRUCTION
时收到cell
错误。
这是我的代码:
import UIKit
class settingsViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell : UITableViewCell!
if indexPath.section == 1
{
if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("draftCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("profileCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("logoutCell", forIndexPath: indexPath) as UITableViewCell
}
}
else if indexPath.section == 2{
if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("facebookCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("twitterCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("rateusCell", forIndexPath: indexPath) as UITableViewCell
}
}
else if indexPath.section == 3
{
if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("creditsCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("contactusCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("termsandconditionsCell", forIndexPath: indexPath) as UITableViewCell
}
}
return cell
}
答案 0 :(得分:0)
对于0号部分,您还没有编写cellForRowAtIndexPath。你给出了段数= 3,所以它的索引从0开始,
更正你的indexpath.section比较,即对indexpath.section == 0,indexpath.section == 1和indexpath.section == 2执行此操作。
您还没有为tableview单元注册类
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
答案 1 :(得分:0)
最好在故事板中使用静态tableView,而不是尝试以编程方式在动态tableView中编写静态单元格。
Apple的Table View Programming Guide建议:
使用静态单元格设计具有固定行数的表,每个行都有自己的布局。当您在设计时知道表格的外观时,请使用静态单元格,无论其显示的具体信息如何。
如果您决定动态处理此问题,那么如果使用switch语句而不是嵌套ifs,则代码将更易于阅读和维护。
答案 2 :(得分:0)
你有3个部分,但索引应该从0开始(0,1,2,3,...)。因此,从indexPath.section == 0
(这是表的第一部分)开始修改代码。此外,我同意PetahChristian的说法,你可以使用静电来设计你的桌子。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell : UITableViewCell!
if indexPath.section == 0
{
if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("draftCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("profileCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("logoutCell", forIndexPath: indexPath) as UITableViewCell
}
}
else if indexPath.section == 1{
if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("facebookCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("twitterCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("rateusCell", forIndexPath: indexPath) as UITableViewCell
}
}
else if indexPath.section == 2
{
if indexPath.row == 0
{
cell = tableView.dequeueReusableCellWithIdentifier("creditsCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 1
{
cell = tableView.dequeueReusableCellWithIdentifier("contactusCell", forIndexPath: indexPath) as UITableViewCell
}
else if indexPath.row == 2
{
cell = tableView.dequeueReusableCellWithIdentifier("termsandconditionsCell", forIndexPath: indexPath) as UITableViewCell
}
}
return cell
}