好吧,所以我正在创建这个视图,我将所有联系人都带到手机上,我只是将它们添加到一个数组中并循环通过该数组,以便在我的表视图中创建单元格。问题是,当我滚动时,单元格内容在索引上更改或者只是从表中消失。我正在创建我的表并像这样填充它:
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
正在检索变量numberofContacts
和CNContactStore()
的位置,该部分正常工作。该表填充了所有联系人,您可以完美地向下滚动它们,但是一旦单元格滚动到屏幕外,您向后滚动的值将被重新分配。
我还添加了一个功能,当您点击联系人姓名时,您可以调用他们的第一个指定号码,如下所示:
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!)
}
}
请帮助,我不知道我在哪里弄乱这个。谢谢。
答案 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
的值,这就是给你空单元格。