我在这个问题上被困了好几个小时。我在一个在UIVC内部的tableview中创建了一个自定义单元格。自定义单元格具有自己的类文件,并且所有单元格都链接在一起,并且其中的按钮通过代理连接到UIVC。
在自定义单元格中,包含UITextView
和一些按钮。
点击tableview会添加一个新的自定义单元格。用户可以键入他们美丽的心愿,最终辞去textview的第一响应者。这是我的问题。
MAIN。首先关闭。超时时,单元格开始混合用户输入的文本,并开始重复使用它。它变得一团糟。
由于我有一个自定义单元格,我不需要在UIVC的viewDidLoad
中注册该类。表示堆栈溢出答案。
可选。其次。最后,在某一点之后,键盘会阻止单元格视图。我不知道如何将单元格滚动到tableview的顶部。
可选。第三。这只是一个奖励。如何能够通过合适的存储方法从单元格中保存数据。我听说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
}
答案 0 :(得分:1)
当用户键入文本时,您应该根据您的要求将其保存到某个数组或字典中,这样可以帮助您解决问题。
现在,你的第二个问题是滚动我回答this question希望这会有所帮助。这是客观的C,但是。
和第三,用于将数据从OneVc传输到另一个,您可以使用Segues 希望这有帮助
答案 1 :(得分:1)
MAIN:当您将单元格出列时,意味着可以重复使用单元格,而不是每次都创建新单元格。为此UITableViewCell
有一个名为prepareForReuse()的方法,您可以覆盖该方法,您可以在其中重置所有单元格内容。例如:
override func prepareForReuse() {
myTextView.text = ""
}
由于我有一个自定义单元格...
如果您的自定义单元格只有*.swift
个文件,则必须registerClass(:forCellReuseIdentifier:)
如果您还有*.xib
个文件,则应viewDidLoad
<强>可选强>
您可以使用scrollToRowAtIndexPath(_:atScrollPosition:animated:)将所需的单元格滚动到tableView
<强>可选强>
您可以使用CoreData,JSON,一些SQLite包装器来保存数据。在NSUserDefaults
中,您可以使用少量数据,例如某些设置。
我建议暂时使用NSJSONSerialization。您可以使用NSFileManager从Dictionary创建NSData并将数据作为*.json
写入Documents目录。在您的应用程序中,您应该保留包含所有数据的数组或字典,并将数据传递给另一个视图控制器。