2017-03-03 70 views
3

我的视图层级看起来像这样:
ElevethViewController类型的UIViewController
容器视图
ManagedTableEleventhViewController嵌入在容器视图类型的UITableViewController的如何从UITableViewController中的静态单元格获取textFields?迅速

ManagedTableEleventhViewController包含含有各1个TextField和一个空的静态池4个的静态细胞。

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

+0

什么是viewController?你粘贴的代码被破坏。 – Magnas

+0

@Magnas View Controller是EleventhViewController。我在本教程后创建了视图层次结构https://www.youtube.com/watch?v=zAWO9rldyUE – bibscy

+0

在您发布的代码中,ManagedTableEleventhViewController类没有方法。这仅仅是你的一个“粘贴”决定还是真的没有方法? – Magnas

回答

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") 
      } 
     } 
    } 
} 
+0

将文本字段从对象库中拖出并放入tableView的静态单元格。 – bibscy

1

只需跟进,如果这是你的验证来should'nt只检查“”的情况下,因为你允许“”,“”等使用的isEmpty,应该更好地工作,如果你只是想检查文本的存在。 另外你不必从子视图中提取字段,因为你已经有了属性,但我不确定你是否有任何其他的理由。

编辑。 Ooops,我只是注意到你在一个没有任何可见字段的控制器中检查textfields,所以通常你的支票永远不会通过。

我认为你应该不应该为另一个类中的一个类验证textfields,除非它的类通常处理textfield验证。

在EleventhViewController中你没有文本框,所以没有什么可验证的。

相关问题