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

Ios 创建自定义tableView单元格textField或textView标记,ios,swift,uitableview,tags,textfield,Ios,Swift,Uitableview,Tags,Textfield,我有多个tableView,每个tableView都有txtName和txtNote。txtName是textField,txtNote是textView。我尝试发送textField标记和textView标记,但不发送custom(仅限于indexPath.row)。因为标记是Int,所以我对其进行如下自定义: let tagString = String(row) + String(703) print("tagString:\(tagString)") le

我有多个tableView,每个tableView都有txtName和txtNote。txtName是textField,txtNote是textView。我尝试发送textField标记和textView标记,但不发送custom(仅限于indexPath.row)。因为标记是Int,所以我对其进行如下自定义:

let tagString = String(row) + String(703)
        print("tagString:\(tagString)")
        let intTagString = Int(tagString)
        cell.txtNote.tag = intTagString!
打印时,我得到了自定义标记字符串示例,如0703、1703、2703等

但是当我尝试用这个来获取txtNote标签时:

func textViewDidChange(_ textView: UITextView) {
    print("textview text:\(textView.text!) and text tag:\(textView.tag)")
}
文本标记:仅将最后一个intTagString打印为703


如何更正此错误,以便获得整个自定义标记?

当您将文本整数字符串转换为整数时,将省略第一个零(0000…)。这就是为什么
“00703”
变成
703

您可以通过在第一个位置添加一个“一”来更正此问题:
“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
    }
}
导入UIKit
类ViewController:UIViewController{
var tableView:UITableView!
让reuseId=“**MyCell**”
重写func viewDidLoad(){
super.viewDidLoad()
tableView=UITableView.init(框架:view.bounds,样式:。分组)
register(MyCell.classForCoder(),forCellReuseIdentifier:reuseId)
tableView.dataSource=self
tableView.delegate=self
view.addSubview(tableView)
}
}
扩展ViewController:UITableViewDataSource{
func numberOfSections(在tableView:UITableView中)->Int{return 1}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{return 8}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell=tableView.dequeueReusableCell(标识符:reuseId,for:indexath)
如果let cell=cell as?MyCell{
configCell(somethingHere:nil,父级:tableView,with:indexPath)
}
返回单元
}
}
///为tableview创建自定义委托
协议MyTableViewDalegate:UITableViewDelegate{
func tableView(tableView:UITableView?,didChange textView:UITextView,位于indexath:indexPath)
}
///[***]实现自定义委托
扩展视图控制器:MyTableViewDalegate{
func tableView(tableView:UITableView?,didChange textView:UITextView,位于indexath:indexPath){
打印(“表视图单元格已更改为indexpath:,indexpath”)
}
}
///实现文本视图委托的自定义单元格类
类MyCell:UITableViewCell、UITextViewDelegate{
var textView:UITextView!
var-cellIndexPath:indepath!
变量父项:UITableView?
必需的init?(编码器aDecoder:NSCoder){fatalError(“init(编码器:)尚未实现”)}
重写init(样式:UITableViewCell.CellStyle,reuseIdentifier:String?){
init(样式:style,reuseIdentifier:reuseIdentifier)
textView=UITextView.init()
textView.delegate=self
textView.text=“Lorem ipsum sit dolor”
添加子视图(文本视图)
textView.sizeToFit()
}//UI准备工作结束
func configCell(somethingHere:Any?,父级:UITableView?,带indexPath:indexPath){
self.parent=parent
self.cellIndexPath=indepath
}
//文本视图委托
func textViewDidChange(textView:UITextView){
让delegate=parent?委托为?MyTableViewDalegate

委托?.tableView(父,didChange:textView,at:cellIndexPath)//您在哪里为textView设置了标记?&您的意思是tableView有多个单元格,每个单元格都有txtName和txtNote?我从故事板设置了标记。是的,每个tableView都有txtName和txtNote。不是多个单元格,而是多个tableView。或者将其切换为String(703)+String(行)?是的,你喜欢的每一条规则。但是如果你想以后用这些标记值做一些事情,你需要应用你的规则过滤掉你想要的数字。以后,我从那个Int创建字符串并把最后一个字符分开,因为我设置的最后一个字符从来没有超过9。所以只有一个字符从来没有像10这样的两倍。所以我得到了哪个tableView和我得到了正在编辑的那一行。你为什么不为此申请一个
委托人
?这样处理你的案件更清楚、更安全。所以,我尝试在