如何防止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到行为中。
尝试调整你的代码,使其适用于重用单元格,或者如果这是不可能的,你必须编写自己的自定义表格视图(我不推荐)