Swift 如何从UITableViewController中的静态单元格中获取文本字段?敏捷的

Swift 如何从UITableViewController中的静态单元格中获取文本字段?敏捷的,swift,uitableview,Swift,Uitableview,我的视图层次结构如下所示: UIViewController类型的ElevethViewController 容器视图 内嵌在容器视图中的UITableViewController类型的ManagedTableEleventhViewController ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个文本字段和一个空静态单元格 class ManagedTableEleventhViewController: UITableVie

我的视图层次结构如下所示:
UIViewController类型的ElevethViewController
容器视图
内嵌在容器视图中的UITableViewController类型的ManagedTableEleventhViewController

ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个文本字段和一个空静态单元格

   class ManagedTableEleventhViewController: UITableViewController,UITextFieldDelegate {

  var hasText:Bool! 
  @IBOutlet weak var fullName: UITextField!
  @IBOutlet weak var flatNumber: UITextField!
  @IBOutlet weak var streetAddress: UITextField!
  @IBOutlet weak var phoneNumber: UITextField!

   //checkValue takes ELViewController parameter so that segue can be 
     //performed when button is touched in EleventhViewController


   func checkValue(ELViewController:EleventhViewController) {

     //loop through the textfields and check if they have text
       for case let textField as UITextField in viewController.view.subviews {

      //print is not executed meaning loop is not performed
             print("some text")
         if textField.text == "" {
             self.hasText = false
               textField.layer.borderColor = UIColor.red.cgColor
                 } else {
             print("true value in for loop")
              self.hasText = true

    performSegue(withIdentifier: "elevethToTwelveth", sender: ELViewController)
       }
  }//end of for loop
}





class EleventhViewController: UIViewController {

    var nextButtonOutlet:UIButton!

      override func viewDidLoad() {
            super.viewDidLoad()

//create button programmatically
      var button = UIButton(type: UIButtonType.custom) as UIButton
         button = UIButton(frame: CGRect(x: 0, y: 637, width: 375, height: 50))
          button.titleLabel?.textColor = UIColor.white
          button.backgroundColor = UIColor(colorLiteralRed: 117/255, green: 232/255, blue: 0, alpha: 1)
          button.setTitle("Next", for: .normal)
             button.addTarget(self, action: #selector(EleventhViewController.nextButton), for: .touchUpInside)
         self.view.addSubview(button)
          self.nextButtonOutlet = button
   }


       func nextButton(sender: UIButton) {

      //create instance of tableView
         let managedTable = ManagedTableEleventhViewController()
           managedTable.checkValue(viewController: self)

  } //end of  EleventhViewController class

首先,我可以给你一个可能让你满意的答案,并修复你的循环,但我建议不要用这种方式来改变你的文本字段。我建议在cellForRow中执行此操作,即使它们可能是静态单元格。根据单元格中的视图设置,如果文本字段直接添加到单元格中,而不是添加到另一个视图中,则会是这样

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    print("Testing")
    for cell in tableView.visibleCells{
        for sub in cell.contentView.subviews{
            if sub is UITextField{
                print("Textfield")
            }
        }
    }
}

接下来,如果这是为了验证,您不应该只检查“”大小写,因为您允许“”等。如果您只想检查文本是否存在,请使用isEmpty,它应该工作得更好。 另外,您不必从子视图中提取字段,因为您已经有了属性,但我不确定您是否还有其他理由支持这种逻辑

编辑。哎呀,我刚刚注意到你在一个没有任何可见字段的控制器中检查文本字段,所以通常你的检查永远不会通过

我认为你甚至不应该在另一个类中验证一个类的文本字段,除非它是一个处理文本字段验证的类


在EleventhViewController中,您没有文本字段,因此没有要验证的内容。

什么是viewController?粘贴的代码已断开。@Magnas的视图控制器为EleventhViewController。在本教程之后,我在您发布的代码中创建了视图层次结构,ManagedTableEleventhViewController类没有任何方法。这仅仅是您的“粘贴”决定,还是类中真的没有方法?@Magnas我想尽量减少粘贴的代码量,使其更具可读性。我已经用编程按钮更新了我的代码,每次触摸该按钮都会调用
func nextButton()
。@Magnas我误读了你的问题。在ManagedTableEleventhViewControlle中有
func checkValue(ELViewController:EleventhViewController)
方法。现在,每次触摸NextButtoOutlet时,都会在EleventhViewController中调用checkValue方法。文本字段从对象库中拖动,并放置在tableView的静态单元格中。