TableView有3个部分和单元格崩溃

时间:2015-12-26 13:23:57

标签: swift uitableview swift2

我有一个简单的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


}

3 个答案:

答案 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
}