2017-03-03 3 views
3

マイビューの階層は次のようになりますタイプの
ElevethViewControllerのUIViewController
コンテナビュー
ManagedTableEleventhViewControllerコンテナビューに埋め込まれたタイプのUITableViewControllerのUITableViewControllerの静的なセルからtextFieldsを取得するには?スウィフト

ManagedTableEleventhViewControllerは1つのテキストフィールドそれぞれ1つの空の静的セルを含む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

テキストフィールドがオブジェクトライブラリからドラッグされ、テーブルビューの静的セル。 – bibscy

1

だけフォローアップするには、この検証のためであれば、あなただけの「チェックするshould'nt」ケースを、あなたが許可しているため「「」、」などの使用のisEmptyをあなただけしたい場合、それは、より良い動作するはずテキストの存在をチェックする。 また、あなたは既にプロパティを持っているので、サブビューからフィールドを抽出する必要はありません、私はあなたがこのロジックのための他の理由があるかどうかはわかりません。

編集。 Ooops、私はちょうど目に見えるフィールドを持たないコントローラのテキストフィールドのチェックに気付いたので、通常あなたのチェックは決して通過しません。

一般的にテキストフィールドの検証を扱うクラスでない限り、別のクラスのあるクラスのテキストフィールドを検証すべきではないと思います。

EleventhViewControllerにはテキストフィールドがないため、検証するものはありません。

関連する問題