实现UITextFieldDelegate

时间:2017-01-23 18:53:08

标签: ios swift uitableview uitextfield

我想在我的项目中使用https://github.com/intuit/AnimatedFormFieldTableViewCell,但我无法理解设置它的步骤。到目前为止,我已从文件夹中拖动文件,并按照以下步骤操作:

要使用AnimatedFormFieldTableViewCell,您所要做的就是:

1)在ViewController上注册AnimatedFormFieldTableViewCell nib,在其上实现UITableView以获得重用标识符。

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.registerCellNib(AnimatedFormFieldTableViewCell)

    tableView.reloadData()
}

2)将CellForRowAtIndexPath上的单元格作为AnimatedFormFieldTableViewCell出列。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cellIdentifier = "cell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! AnimatedFormFieldTableViewCell

    return cell
}

3)通过在单元格本身上调用setLabelText来更改占位符的标签文本。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cellIdentifier = "cell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! AnimatedFormFieldTableViewCell

    cell.setLabelText("Enter title")

    return cell
}

注意:

1)你仍然可以像在常规UITextField上实现的那样实现UITextFieldDelegate,你只需要定义AnimatedFormFieldTableViewCell的委托(不需要直接定义嵌入式UITextField的委托)。 / p>

2)为了访问嵌入式UITextField,您只需调用单元格的cellTextField属性。

I don’t get these last two steps.

如果我运行自己的应用,我会在unexpectedly found nil课程的self.cellTextfield.delegate = self上获得AnimatedFormFieldTableViewCell

我错过了什么?

3 个答案:

答案 0 :(得分:2)

您好waseefakhtar您的代码不会遗漏任何内容。唯一的问题是您使用错误的方式注册了笔尖,这就是unexpectedly found nil上出现self.cellTextfield.delegate = self错误的原因。

试试这段代码:

  let myNib = UINib.init(nibName: "AnimatedFormFieldTableViewCell", bundle: nil)
  self.tableView.registerNib(myNib, forCellReuseIdentifier: "cell")

PS:请注意,registerNib方法的语法可能会有所不同,具体取决于swift版本

答案 1 :(得分:1)

我的代码在这里,我不知道您的文书错误在哪里,但您可以查看我的代码以找出:

import UIKit

class ViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // register a nib like below 
        let nib:UINib = UINib.init(nibName: "AnimatedFormFieldTableViewCell", bundle: nil)

        self.tableView.register(nib, forCellReuseIdentifier: "AnimatedFormFieldTableViewCell")

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        return 88.0
   }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "AnimatedFormFieldTableViewCell", for: indexPath as IndexPath) as! AnimatedFormFieldTableViewCell

        cell.setLabelText("Enter title")

        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        tableView.deselectRow(at: indexPath, animated: true)
    }

}

结果:

enter image description here

所以,只需检查出错的步骤。

答案 2 :(得分:0)

文档说明了这一点:

There is no need to directly define the delegate for the embedded UITextField

说明是执行以下操作:

You just need to define the AnimatedFormFieldTableViewCell's delegate

您需要设置AnimatedFormFieldTableViewCell的委托而不是cellTextField的委托,所以:

self.delegate = yourUITextViewDelegate

而不是self.cellTextField.delegate = yourUITextViewDelegate(这是错误的)

这是文档描述的内容

编辑:OP澄清了委托分配代码不属于他们的类;它在pod的课堂上。我正在考虑删除这个答案,因为我认为它没有解决问题。