Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:在TableView中获取TextView的文本(可能有两种方法)_Ios_Arrays_Swift_Uitableview_Uitextview - Fatal编程技术网

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

Ios Swift:在TableView中获取TextView的文本(可能有两种方法),ios,arrays,swift,uitableview,uitextview,Ios,Arrays,Swift,Uitableview,Uitextview,我有一个包含可编辑文本视图的TableView,我想在用户尝试移动到下一页时检查它们是否包含文本。但是,我不确定如何从TableView内部引用它们。有什么想法吗 以下是我的设置: func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifie

我有一个包含可编辑文本视图的TableView,我想在用户尝试移动到下一页时检查它们是否包含文本。但是,我不确定如何从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
    }
}
在我的viewcontroller中有一个按钮,如果所有字段都有文本,该按钮将前进到下一页

每当目标对象被创建时,每个步骤都会添加空文本到目标对象中,因此我考虑在数组中检查该对象是否有文本,但这是另一个数组中的一个数组,我无法让它工作。我尝试了下面的方法,但我得到一个错误,说类型“目标”不符合协议“序列”

@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: ""))
}
目标的结构如下所示:

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)
    }
}
步骤一是:

struct Step: Codable, Equatable {
    var title: String
}
总而言之,我需要检查TableView中所有TextView的文本,或者遍历数组中的数组

有什么想法吗


谢谢

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!。步骤
如图所示
goals[goals.count-1]
您将所有值设置为数组中的最后一项

是否有多个分区或1在tableview中只有一个分区,但用户可以添加任意多的行。谢谢,但返回的错误是:键入“[Step]“?”不符合协议“序列”,仅向步骤中添加序列不足以使其符合协议“序列”。你知道它为什么这么说,或者如何解决吗?我已经在原来的问题中添加了步骤和目标。嘿@Sh_Khan,我成功地让它工作了。事实证明,如果我使用forEach而不是for-in循环,它就会工作。如果你想更新你的答案,我会接受的。目标。最后?步骤!。forEach{step-in if-step.title==“打印(“我是空的!”)}