创建自定义tableView单元格textField或textView标记

时间:2018-12-12 02:41:20

标签: ios swift uitableview tags textfield

我有多个tableView,每个tableView我都有txtName和txtNote。 txtName是textField,txtNote是textView。我尝试发送textField标记和textView标记,但发送自定义标记(仅发送indexPath.row)。因为标签是Int,所以我这样自定义标签:

let tagString = String(row) + String(703)
        print("tagString:\(tagString)")
        let intTagString = Int(tagString)
        cell.txtNote.tag = intTagString!

打印时,我得到了自定义tagString示例,例如0703、1703、2703等。

但是当我尝试使用txtNote标签时:

func textViewDidChange(_ textView: UITextView) {
    print("textview text:\(textView.text!) and text tag:\(textView.tag)")
}

文本标签:仅将最后一个intTagString打印为703。

如何更正此问题,以便获得完整的自定义标签?

1 个答案:

答案 0 :(得分:3)

将文字整数字符串转换为整数时,将省略第一个零(0000 ...)。这就是"00703"成为703

的原因

您可以通过在第一个位置添加一个“ one”来更正此问题:"100703"-> 100703


编辑。整个解决方案使用自定义委托:

import UIKit
class ViewController: UIViewController {
    var tableView: UITableView!
    let ReusedID = "**MyCell**"

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView = UITableView.init(frame: view.bounds, style: .grouped)
        tableView.register(MyCell.classForCoder(), forCellReuseIdentifier: ReusedID)
        tableView.dataSource = self
        tableView.delegate = self
        view.addSubview(tableView)
    }
}
extension ViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int { return 1 }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 8 }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: ReusedID, for: indexPath)
        if let cell = cell as? MyCell {
            cell.configCell(somethingHere: nil, parent: tableView, with: indexPath)
        }
        return cell
    }
}

/// Create a custom delegate for tableview
protocol MyTableViewDalegate: UITableViewDelegate {
    func tableView(_ tableView: UITableView?, didChange textView: UITextView, at indexPath: IndexPath)
}

/// [***] Implement the custom delegate
extension ViewController: MyTableViewDalegate {
    func tableView(_ tableView: UITableView?, didChange textView: UITextView, at indexPath: IndexPath) {
        print("table view cell did change with indexpath: ", indexPath)
    }
}

/// Custom Cell Class which implement text view delegate
class MyCell: UITableViewCell, UITextViewDelegate {
    var textView: UITextView!
    var cellIndexPath: IndexPath!
    var parent: UITableView?

    required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        textView = UITextView.init()
        textView.delegate = self
        textView.text = "Lorem ipsum sit dolor"
        addSubview(textView)
        textView.sizeToFit()
    } // End of UI preparation

    func configCell(somethingHere: Any?, parent: UITableView?, with indexPath: IndexPath) {
        self.parent = parent
        self.cellIndexPath = indexPath
    }

    // TextView Delegate
    func textViewDidChange(_ textView: UITextView) {
        let delegate = parent?.delegate as? MyTableViewDalegate
        delegate?.tableView(parent, didChange: textView, at: cellIndexPath) // <== HERE
        // The delegate will be called in [***] section above
    }
}