自定义单元格TextView重复

时间:2015-08-19 02:18:15

标签: ios swift uitableview cell

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

          }

2 个答案:

答案 0 :(得分:1)

当用户键入文本时,您应该根据您的要求将其保存到某个数组或字典中,这样可以帮助您解决问题。

现在,你的第二个问题是滚动我回答this question希望这会有所帮助。这是客观的C,但是。

和第三,用于将数据从OneVc传输到另一个,您可以使用Segues 希望这有帮助

答案 1 :(得分:1)

MAIN:当您将单元格出列时,意味着可以重复使用单元格,而不是每次都创建新单元格。为此UITableViewCell有一个名为prepareForReuse()的方法,您可以覆盖该方法,您可以在其中重置所有单元格内容。例如:

override func prepareForReuse() {
    myTextView.text = ""
}

由于我有一个自定义单元格...
如果您的自定义单元格只有*.swift个文件,则必须registerClass(:forCellReuseIdentifier:)
如果您还有*.xib个文件,则应viewDidLoad

registerNib( :forCellReuseIdentifier:)

<强>可选
您可以使用scrollToRowAtIndexPath(_:atScrollPosition:animated:)将所需的单元格滚动到tableView

的顶部

<强>可选
您可以使用CoreData,JSON,一些SQLite包装器来保存数据。在NSUserDefaults中,您可以使用少量数据,例如某些设置。 我建议暂时使用NSJSONSerialization。您可以使用NSFileManager从Dictionary创建NSData并将数据作为*.json写入Documents目录。在您的应用程序中,您应该保留包含所有数据的数组或字典,并将数据传递给另一个视图控制器。