如何防止UITableView重用自定义单元格Swift

在我的应用程序中,我使用UITableView自定义单元格。

对于每个单元我实现函数来创build它,并在cellForRow中调用这些函数。

这是来自项目的代码示例:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { if indexPath.row == CellsTypes.profileImageCell.rawValue { return createIntroCell() } else if indexPath.row == CellsTypes.fullNameCell.rawValue { return createUserNameCell() } else if indexPath.row == CellsTypes.emailCell.rawValue { return createEmailCell() } else { return createPasswordCell() }} 

这些是创造function:

 func createUserNameCell() -> TextFieldTableViewCell { let fullNameCell = self.tableView.dequeueReusableCellWithIdentifier("text-field-cell") as! TextFieldTableViewCell fullNameCell.awamirTextFieldNib.setNormalTextFieldCellContent("Full Name") fullNameCell.awamirTextFieldNib.textFieldContent.tag = CellsTypes.fullNameCell.rawValue fullNameCell.awamirTextFieldNib.textFieldContent.returnKeyType = .Next fullNameCell.awamirTextFieldNib.textFieldContent.delegate = self return fullNameCell } func createEmailCell() -> TextFieldTableViewCell { let emailCell = self.tableView.dequeueReusableCellWithIdentifier("text-field-cell") as! TextFieldTableViewCell emailCell.awamirTextFieldNib.setNormalTextFieldCellContent("Email") emailCell.awamirTextFieldNib.textFieldContent.tag = CellsTypes.emailCell.rawValue emailCell.awamirTextFieldNib.textFieldContent.returnKeyType = .Next emailCell.awamirTextFieldNib.textFieldContent.delegate = self return emailCell } func createPasswordCell() -> TextFieldTableViewCell { let textFieldCell = self.tableView.dequeueReusableCellWithIdentifier("text-field-cell") as! TextFieldTableViewCell textFieldCell.awamirTextFieldNib.setPasswordCellContent("Password") textFieldCell.awamirTextFieldNib.textFieldContent.tag = CellsTypes.passwordCell.rawValue textFieldCell.awamirTextFieldNib.textFieldContent.returnKeyType = .Next textFieldCell.awamirTextFieldNib.textFieldContent.delegate = self return textFieldCell } 

问题是如果我重新加载tableview的单元格的内容改变,因为单元格的可复用性。 即:重新加载tableview后,第一个单元格的内容变成第二个单元格,第二个单元格的内容变成第一个单元格!

我怎样才能防止tableview从可重用的细胞?

谢谢。

尝试使用不同的标识符为每个单元格types,所以不要使用"text-field-cell"为每个人,使一个“全名”,“密码”等不知道如何去创build你的单元格,但如果您使用的是registerNib或registerClass,则需要为每个不同的标识符进行注册

 self.tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "full name") self.tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "password") self.tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "email") 

尝试在自定义单元格中实现prepareForReuse方法,并将所有字段的文本设置为零。

 override func prepareForReuse() -> Void { awamirTextFieldNib.text = nil } 

希望这个帮助

你不应该阻止,但如果你真的想,我认为不设置单元格标识符到你的UITableViewCell应该做的伎俩。 当你调用dequeueReusableCellWithIdentifier ,它将找不到任何单元格,并将创build一个新单元格。 但是,再次UITableView ,不build议使用UITableView来实现重用function。

而且,正如@Fonix所build议的那样,为你的UITableView每个单元使用不同的单元标识符可以解决你的问题,同时保持使用单元复用系统。

编辑:正如你在谈论失去你的UITextField中的文本内容,也许单一的改变是改变你的@propery weak属性strong

希望这可以帮助。

不要使用默认的UITableView,并且不要重复使用单元格,而是将其embedded到行为中。

尝试调整你的代码,使其适用于重用单元格,或者如果这是不可能的,你必须编写自己的自定义表格视图(我不推荐)