滚动时TableView重新排列/创建空白单元格。迅速

时间:2016-02-02 19:49:24

标签: ios xcode swift uitableview swift2

好吧,所以我正在创建这个视图,我将所有联系人都带到手机上,我只是将它们添加到一个数组中并循环通过该数组,以便在我的表视图中创建单元格。问题是,当我滚动时,单元格内容在索引上更改或者只是从表中消失。我正在创建我的表并像这样填充它:

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    return Int(numberofContacts)        
}

var i = 0

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    print(i)
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")

    if(i < numberofContacts){
        cell.textLabel?.text = results[i].givenName + " " + results[i].familyName

    }
    i++

    return cell

}

results正在检索变量numberofContactsCNContactStore()的位置,该部分正常工作。该表填充了所有联系人,您可以完美地向下滚动它们,但是一旦单元格滚动到屏幕外,您向后滚动的值将被重新分配。

我还添加了一个功能,当您点击联系人姓名时,您可以调用他们的第一个指定号码,如下所示:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    if results[indexPath.row].isKeyAvailable(CNContactPhoneNumbersKey){
        let selected = (results[indexPath.row].phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String

        let urlPhone = NSURL(string: "tel://\(selected)")

        UIApplication.sharedApplication().openURL(urlPhone!)

    }

}

请帮助,我不知道我在哪里弄乱这个。谢谢。

1 个答案:

答案 0 :(得分:1)

你应该这样做:

public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return Int(numberofContacts)        
}

public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")

    cell.textLabel?.text = results[indexPath.row].givenName + " " + results[indexPath.row].familyName
    return cell
}

你的细胞正在重复使用,所以如果你依赖于你的i var,你最终会增加它超过numberofContacts的值,这就是给你空单元格。