使用多个自定义单元格创建tableview时出错

时间:2016-08-29 14:20:13

标签: ios swift uitableview

我在swift尝试根据一系列条件创建由tableview组成的cells时遇到错误。

这是我的代码:

var tableData: [String] = []

@IBOutlet var tableView: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
}

// number of rows in table view
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.tableData.count
}

// create a cell for each table view row
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let phonenocell:MyCustomCell = self.tableView.dequeueReusableCellWithIdentifier("phonecell", forIndexPath: indexPath) as! MyCustomCell

    let pincell:SocialCell = self.tableView.dequeueReusableCellWithIdentifier("socialcell", forIndexPath: indexPath) as! SocialCell

    let fbcell:FacebookCell = self.tableView.dequeueReusableCellWithIdentifier("facebookcell", forIndexPath: indexPath) as! FacebookCell

    let snapcell:SnapchatCell = self.tableView.dequeueReusableCellWithIdentifier("snapchatcell", forIndexPath: indexPath) as! SnapchatCell

    let twitcell:TwitterCell = self.tableView.dequeueReusableCellWithIdentifier("twittercell", forIndexPath: indexPath) as! TwitterCell

    let instacell:InstagramCell = self.tableView.dequeueReusableCellWithIdentifier("instagramcell", forIndexPath: indexPath) as! InstagramCell


    if tableData.contains("Number") {
        return phonenocell
    }

    if tableData.contains("Social") {
        return pincell
    }

    if tableData.contains("Facebook") {
        return fbcell
    }

    if tableData.contains("Snapchat") {
        return snapcell
    }

    if tableData.contains("Twitter") {
        return twitcell
    }

    if tableData.contains("Instagram") {
        return instacell
    }

}

尝试构建和运行时,我发现构建失败并出现以下错误:

"Missing Return in a function expected to return 'UITableViewCell'

我一遍又一遍地使用我的代码,但老实说,我无法看到我出错的地方......

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

你需要肯定地返回牢房。 你已经在条件下做了,但是如果你的条件陈述都没有成功,你的回访就不会被解雇。

追加,例如:

return phonenocell

到函数结束时,应该快速修复你的代码。它确保该函数将返回一个单元格(这是必需的)。

  

我的数据源是数组tableData。这是在上一个视图中构建的:@IBAction func switch1Toggled(sender: UISwitch) { if mySwitch1.on { fbTextBox.text = "Selected" dataArray.append("Facebook")

这可能是主要问题:

假设您选择'facebook'并重新加载tableView,每行都将传递第一个条件,因为它包含在内。 你应该把它放在你的方法中:

//assuming your data source contains multiple members, and your numberOfRowsInSections... method return tableData.count, you need to get each item for each row:

let currentTag = tableData[indexPath.row]
if (currentTag == "something") { //e.g. Facebook
    let somethingcell:MySomethingCell =  ... 
    self.tableView.dequeueReusableCellWithIdentifier("somethingcell", forIndexPath: indexPath) as! MySomethingCell
    return somethingcell
} else if {
    ...
} 

return emptycell //this line is just for the case, when no of your conditions will pass and you don't catch all the situations...

答案 1 :(得分:0)

也许您的数组元素与条件不匹配,最好返回默认值而不是条件失败