Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)

Posted

技术标签:

【中文标题】Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)【英文标题】:Swift: get text of TextView inside TableView (two approaches possible) 【发布时间】:2019-07-21 13:29:04 【问题描述】:

我有一个 TableView,里面有可编辑的 TextView,我想在用户尝试移动到下一页时检查它们是否包含文本。但是我不确定如何从 TableView 中引用它们。有什么想法吗?

这是我的设置:

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

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

    // Cell Formatting

    cell.label.delegate = self
    cell.delegate = self

    return cell

然后是 textview 委托的扩展:

extension Step3: UITextViewDelegate 


func textViewDidChange(_ textView: UITextView) 
    let cell = textView.superview?.superview as? StepCell
    let indexPath = tableview.indexPath(for: cell!)
    goals[goals.count - 1].steps![indexPath!.row].title = textView.text
    resizeTableViewCell()


func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool 
    if text == "\n" || text == "\t" 
        textView.resignFirstResponder()
        return false
    
    return true
    

在我的视图控制器中,如果所有字段都有文本,则该按钮将前进到下一页。

每当创建 Goal 对象时,每个步骤都会添加空文本,因此我考虑检查数组以查看对象是否有任何文本,但这是另一个数组中的数组,我无法得到去工作。我尝试了类似下面的方法,但我收到一条错误消息,提示 Type 'Goal' does not conform to protocol 'Sequence'

@IBAction func nextTU(_ sender: Any) 

    for steps in goals[0] 
        print(steps.steps)

如果它很重要,下面是添加步骤的代码:

@IBAction func addTU(_ sender: Any) 
    goals[goals.count - 1].steps?.append(Step(title: ""))

Goals 的结构如下所示:

struct Goal: Codable, Equatable 
    var title: String
    var description: String?
    var duration: String
    var steps: [Step]?
    var completedSteps: [Step]?
    var completed: Bool
    var dateCreated: Date

    func returnYear(date: Date) -> Int 
        let calendar = Calendar.current
        return calendar.component(.year, from: date)
    

Step 就是这样的:

struct Step: Codable, Equatable 
    var title: String

所以回顾一下,我要么需要检查 TableView 中所有 textView 的文本,要么需要遍历数组中的数组。

有什么想法吗?

谢谢

【问题讨论】:

你有很多部分还是只有1个 tableview 中只有一个部分,但用户可以添加任意数量的行。 【参考方案1】:

goals[0]Goal 类型的对象,你不能遍历它,你需要

@IBAction func nextTU(_ sender: Any)  
   for step in goals.last!.steps 
       if step.text == "" 
          // alert user 
       
   

goals.last?.steps!.forEach  
    if $0.title == "" 
       print("I'm empty!") 
     

上面你应该使用goals.last!.steps,因为这里goals[goals.count - 1]你将所有值设置为数组中的最后一项

【讨论】:

谢谢,但返回错误提示:键入“[步骤]?”不符合协议“Sequence”,仅将 Sequence 添加到 Step 不足以使其符合。知道为什么会这样说或如何解决吗? 我已将 Step 和 Goal 添加到原始问题中。 嘿@Sh_Khan,我设法让它工作了。事实证明,如果我使用 forEach 而不是 for in 循环,它将起作用。如果你想更新你的答案,我会接受。目标.last?.steps!.forEach step in if step.title == "" print("I'm empty!")

以上是关于Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在 TableView 中获取 TextView 的文本(可能有两种方法)

在swift 5中将json数据获取到tableview

如何在 Swift 2.0 中的 TableView 中获取选中标记的项目

IOS swift如何在标签点击时在TableView中获取标签文本

如何使用 Swift 从 tableview 单元格中获取数据而不显示在标签上?

如何在 Tableview 单元格中获取 UIButton 的位置,并在 Swift 中添加目标?