Ios 创建自定义tableView单元格textField或textView标记
我有多个tableView,每个tableView都有txtName和txtNote。txtName是textField,txtNote是textView。我尝试发送textField标记和textView标记,但不发送custom(仅限于indexPath.row)。因为标记是Int,所以我对其进行如下自定义: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
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和我得到了正在编辑的那一行。你为什么不为此申请一个委托人
?这样处理你的案件更清楚、更安全。所以,我尝试在