如何区分自定义单元格中的两个文本字段?

Posted

技术标签:

【中文标题】如何区分自定义单元格中的两个文本字段?【英文标题】:How to distinguish between two textFields in a custom cell? 【发布时间】:2019-06-11 04:38:22 【问题描述】:

我在表格视图的自定义单元格中有两个文本字段(故事标题和作者),我想通过 textFieldDidEndEditing 方法编辑和保存这些字段中的数据。如何区分方法中的两个字段?

我目前的代码如下:

func textFieldDidEndEditing(_ textField: UITextField) 

    let touchPosition:CGPoint = textField.convert(CGPoint.zero, to:self.storiesTableView)

    let indexPath = self.storiesTableView.indexPathForRow(at: touchPosition)

    let storyForEdit = self.stories?[indexPath!.row]

    var editedTitleText = ""

    let cell = tableView(storiesTableView, cellForRowAt: indexPath!) as! StoryCell

    let storyTitleField = cell.storyTitleField


    if textField.text?.isEmpty ?? true 

        deleteTitle(at: storyForEdit!)

     else 

        editedTitleText = textField.text ?? ""

        do 
            try self.realm.write 
                storyForEdit!.title = editedTitleText
            
         catch 
            print("Error editing story \(error)")
        

        self.storiesTableView.reloadData()


    

我有 storyCell.swift 中两个字段的参考出口:

class StoryCell: UITableViewCell 


@IBOutlet weak var storyTitleField: UITextField!

@IBOutlet weak var authorField: UITextField!

....

但是,当我尝试使用代码(此处建议:iphone: uitextfield, multiple textfields with the same delegate?)来区分这两个字段时:

    if textField == storyTitleField 

        print("Here we are in storyTitle field")

    

什么都没有发生 - 没有数据被持久化。但是,如果我只使用通用文本字段,那么我无法区分标题和作者文本字段。感谢您对此提出任何建议。

【问题讨论】:

使用组件的tag属性? 感谢您的快速回复。我已经在其他帖子中看到了这个建议,并会尝试一下,但是,我认为参考网点已经存在于这些领域的参考网点将是要走的路? 出口是否与代表处于同一上下文中?如果是这样,您可以简单地将textField 与网点进行比较。如果委托是在其他上下文中声明的,那么使用 tag 可能是(稍微)更好的解决方案 出口在storyCell.swift中。 DidEndEditing 在视图控制器中。 然后将网点与参考进行比较是行不通的。您可以在表格视图中有多个单元格实例,并且很难确定哪个单元格已被编辑。从长远来看,使用tag 更简单,更不容易出错 【参考方案1】:

你可以试试这个

override func viewDidLoad() 
        super.viewDidLoad()
        textfield1.delegate = self
        textfield1.tag = 11

        textfield2.delegate = self
        textfield2.tag = 22

        textfield3.delegate = self
        textfield3.tag = 33




func textFieldDidEndEditing(_ textField: UITextField) 

        if textField.tag == 11
        
            //your code here
        

        if textField.tag == 22
        
            //your code here
        

        if textField.tag == 33
        
            //your code here
        

    

【讨论】:

感谢 Khushai 的回复。这是我最终采用的方式,尽管我在 storyCell.swift 文件中设置了以下标签: func setStory(storyRealm : Story) story = storyRealm storyTitleField.tag = 5 authorField.tag = 6 【参考方案2】:

为每个 TextField 设置不同的标签(

txtFld1.tag = 5
txtFld2.tag = 6

) 然后在 textFieldDidEndEditing 中检查 textField 的标签。

【讨论】:

以上是关于如何区分自定义单元格中的两个文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

自定义表格视图单元格中的可编辑文本字段

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

如何使用文本字段 UITableView 从自定义单元格中获取值?

如何在自定义表格视图单元格中保存文本字段

滚动时自定义 UITableViewCell 中的 UITextFields 文本出现在其他单元格中