2017-03-03 76 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中你沒有文本框,所以沒有什麼可驗證的。

相關問題