我在这个问题上被困了几个小时。我在 UIVC 内的 TableView 中创建了一个自定义单元格。自定义单元格有它自己的类文件,并且全部链接起来,并且其中的按钮通过委托(delegate)连接到 UIVC。
自定义单元格内包含一个 UITextView
以及一些按钮。
点击表格 View 会添加一个新的自定义单元格。用户可以输入他们美丽的心想要的任何内容,最终辞去 textview 的第一响应者。这是我的问题。
主要内容。 首先。随着时间的推移,单元格开始混淆用户输入的文本,并开始重复使用它。它变得一团糟。
由于我有一个自定义单元格,所以我不需要在 UIVC 的 viewDidLoad
中注册该类。堆栈溢出答案已说明。 p>
可选。其次。最终,在某个点之后,键盘会阻塞单元格 View 。我不知道如何将单元格滚动到表格 View 的顶部。
可选。 第三。这只是一个奖励。如何使用合适的存储方法从单元格中保存数据。我听说 NSUserDefaults
只适用于小内存存储文件。基本上。将自定义单元格内 TextView 中的数据传输到另一个可以保存数据的区域(UIVC?)。最有可能使用数组并将数据保存在该数组上。
代码。根据要求。
UIVC
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let reminderCell = reminder_tableView.dequeueReusableCellWithIdentifier("cellReminder", forIndexPath:indexPath) as! addReminderCell
reminderCell.selectionStyle = .None
reminderCell.heightForReminderTextDelegate = self
reminderCell.delegate = self
reminderCell.reminder_textview.becomeFirstResponder()
return reminderCell
}
自定义单元格代码。虽然不是全部。
import UIKit
import AVFoundation
//MARK: Height For Reminder Delegate
protocol HeightForReminderTextView
{
func heightOfTextView(height: CGFloat)
}
//MARK: Beginning of Class
class addReminderCell: UITableViewCell, UITextViewDelegate {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: nil)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
//MARK: Delegate Declarations
var heightForReminderTextDelegate :HeightForReminderTextView?
//MARK: Element IBOutlets
@IBOutlet var reminder_textview: UITextView!
@IBOutlet var reminder_cell_uiview: UIView!
//MARK: Button
@IBAction func non_priority_button(sender: AnyObject) {
println("pressed")
}
//MARK: Awake From Nib Starts Here
override func awakeFromNib() {
super.awakeFromNib()
reminder_textview.delegate = self
}
最佳答案
MAIN: 当您将一个单元格出队时,这意味着该单元格可以被重复使用,它不会每次都创建一个新单元格。为此,UITableViewCell
有一个名为 prepareForReuse() 的方法您可以覆盖它,您可以在其中重置所有单元格内容。例如:
override func prepareForReuse() {
myTextView.text = ""
}
由于我有一个自定义单元...
如果您的自定义单元只有 *.swift
文件,您必须 registerClass(:forCellReuseIdentifier:)
如果你还有 *.xib
文件你应该 registerNib( :forCellReuseIdentifier:)在 viewDidLoad
可选
您可以使用 scrollToRowAtIndexPath(_:atScrollPosition:animated:)将所需的单元格滚动到 tableView 的顶部
可选
您可以使用 CoreData、JSON 和一些 SQLite 包装器来保存数据。在 NSUserDefaults
中,您可以使用少量数据,例如一些设置。
我建议使用 NSJSONSerialization目前。您可以使用字典创建 NSData 并将数据作为 *.json
写入文档目录 NSFileManager .在您的应用中,您应该保留一个包含所有数据的数组或字典,并将该数据传递给另一个 View Controller 。
关于ios - 自定义单元格 TextView 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085493/