如何从UITableViewController中的静态单元格获取textFields?迅速

时间:2017-03-03 20:26:01

标签: swift uitableview

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

ManagedTableEleventhViewController包含4个静态单元格,每个单元格包含1个textField和一个空静态单元格。

   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

Main.storyboard

2 个答案:

答案 0 :(得分:3)

首先,我可以给你一个可能满足你的答案并修复你的循环,但我建议不要这样做来改变你的文本域。我建议在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")
            }
        }
    }
}

答案 1 :(得分:1)

只是为了跟进,如果要进行验证,您应该只检查""因为你允许" "," "使用isEmpty,它应该更好,如果你只想检查文本的存在。 此外,您不必从子视图中提取字段,因为您已经拥有属性,但我不确定您是否有任何其他原因可用于此逻辑。

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

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

在EleventhViewController中,您没有文本字段,因此无需验证。