自定义单元格 TextView 重复
Custom Cell TextView Repeat
我在这个问题上被困了几个小时。我在 UIVC 内的表视图中创建了一个自定义单元格。自定义单元格有它自己的 class 文件,并且全部链接起来,并且其中的按钮通过委托连接到 UIVC。
自定义单元格内包含一个 UITextView
以及一些按钮。
点击表格视图会添加一个新的自定义单元格。用户可以输入他们美丽的心想要的任何内容,最终辞去 textview 的第一响应者。这是我的问题。
MAIN. 首先。随着时间的推移,单元格开始混淆用户输入的文本,并开始重复使用它。它变得一团糟。
由于我有一个自定义单元格,所以我不需要在UIVC的viewDidLoad
中注册class。一个堆栈溢出答案陈述。
可选。第二个。最终,在某个点之后,键盘会阻塞单元格视图。我不知道如何将单元格滚动到表格视图的顶部。
可选。 第三。这只是一个奖励。如何使用合适的存储方法从单元格中保存数据。听说 NSUserDefaults
只适合小内存存储文件。基本上。将自定义单元格内文本视图中的数据传输到另一个可以保存数据的区域(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
}
当用户键入文本时,您应该根据您的要求将其保存到某个数组或字典中,这将帮助您解决重用问题。
现在,你的第二个问题是滚动我回答了希望这会有所帮助。这是在 objective C 虽然。
第三个用于将数据从 OneVc 传输到另一个你可以使用 Segues
希望这有帮助
MAIN: 当您使一个单元格出队时,这意味着该单元格可以被重用,它不会每次都创建一个新单元格。为此 UITableViewCell
有一个名为 prepareForReuse() 的方法,您可以覆盖它,您可以在其中重置所有单元格内容。例如:
override func prepareForReuse() {
myTextView.text = ""
}
因为我有一个自定义单元格...
如果您的自定义单元只有 *.swift
文件,则必须 registerClass(:forCellReuseIdentifier:)
如果您还有 *.xib
文件,您应该 registerNib(:forCellReuseIdentifier:) 在 viewDidLoad
可选
您可以使用 scrollToRowAtIndexPath(_:atScrollPosition:animated:) 将所需的单元格滚动到 tableView 的顶部
可选
您可以使用 CoreData、JSON、一些 SQLite 包装器来保存数据。在 NSUserDefaults
中,您可以使用少量数据,例如某些设置。
我建议使用 NSJSONSerialization for now. You can create NSData from a Dictionary and write data as *.json
to Documents directory using NSFileManager。在您的应用程序中,您应该保留一个包含所有数据的数组或字典,并将该数据传递给另一个视图控制器。
我在这个问题上被困了几个小时。我在 UIVC 内的表视图中创建了一个自定义单元格。自定义单元格有它自己的 class 文件,并且全部链接起来,并且其中的按钮通过委托连接到 UIVC。
自定义单元格内包含一个 UITextView
以及一些按钮。
点击表格视图会添加一个新的自定义单元格。用户可以输入他们美丽的心想要的任何内容,最终辞去 textview 的第一响应者。这是我的问题。
MAIN. 首先。随着时间的推移,单元格开始混淆用户输入的文本,并开始重复使用它。它变得一团糟。
由于我有一个自定义单元格,所以我不需要在UIVC的viewDidLoad
中注册class。一个堆栈溢出答案陈述。
可选。第二个。最终,在某个点之后,键盘会阻塞单元格视图。我不知道如何将单元格滚动到表格视图的顶部。
可选。 第三。这只是一个奖励。如何使用合适的存储方法从单元格中保存数据。听说 NSUserDefaults
只适合小内存存储文件。基本上。将自定义单元格内文本视图中的数据传输到另一个可以保存数据的区域(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
}
当用户键入文本时,您应该根据您的要求将其保存到某个数组或字典中,这将帮助您解决重用问题。
现在,你的第二个问题是滚动我回答了
第三个用于将数据从 OneVc 传输到另一个你可以使用 Segues 希望这有帮助
MAIN: 当您使一个单元格出队时,这意味着该单元格可以被重用,它不会每次都创建一个新单元格。为此 UITableViewCell
有一个名为 prepareForReuse() 的方法,您可以覆盖它,您可以在其中重置所有单元格内容。例如:
override func prepareForReuse() {
myTextView.text = ""
}
因为我有一个自定义单元格...
如果您的自定义单元只有 *.swift
文件,则必须 registerClass(:forCellReuseIdentifier:)
如果您还有 *.xib
文件,您应该 registerNib(:forCellReuseIdentifier:) 在 viewDidLoad
可选
您可以使用 scrollToRowAtIndexPath(_:atScrollPosition:animated:) 将所需的单元格滚动到 tableView 的顶部
可选
您可以使用 CoreData、JSON、一些 SQLite 包装器来保存数据。在 NSUserDefaults
中,您可以使用少量数据,例如某些设置。
我建议使用 NSJSONSerialization for now. You can create NSData from a Dictionary and write data as *.json
to Documents directory using NSFileManager。在您的应用程序中,您应该保留一个包含所有数据的数组或字典,并将该数据传递给另一个视图控制器。