ios - 自定义单元格 TextView 重复

标签 ios swift uitableview cell

我在这个问题上被困了几个小时。我在 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/

相关文章:

ios - 如何通过 UIActivityViewController 打印 UIWebView?

ios - 在 iOS 应用程序中动态调整表格单元格的大小

ios - 使用分页符编辑 NSString

ios - UITextView 在 UITableViewCell 内部增长

ios - 使用 AVCaptureSession 录制视频,添加 CIFilter 并保存到相册

ios - 为什么 iOS 浏览器不播放该 MP4 视频中的音频?

ios - TextField 为空时返回 nil

iphone - 联系苹果进行一次性(每年)加速审查

UI 元素(标签、按钮等)的 Swift 命名约定

ios - 如何使用 Swift 重新加载 UITableView header