2017-08-25 15 views
0

イムは、プログラム的に私の意見を構築しますが、プロパティを設定するための私のコントローラ内のビューを参照する必要があります。私はこれを達成する方法を見ることができない?ViewControllerからのプログラムによるビューへのアクセス?

コントローラがそれをINITSもちろんとしてIビューへの参照を持っているが、ID iが思ったように、私はself.view.textFieldをしようと、例えば、アクセス特性を傾けます。

どうすればよいですか?逆の場合は、コントローラをデリゲートとして入力を処理するために、ビューのtextFieldを設定するなどの作業はどうすればできますか?

初めてIVEはこのすべてをシンプルしかしメシエたストーリーボードを使用していない、これらの問題

+0

クラスのプロパティを宣言し、それらのプロパティで作成したビューへの参照を格納する必要があります。 – Paulw11

+0

ビューファイルで、クラスレベルでUIを宣言してからアクセスできますが、実際のビューをビューファイル内の関数? – jackdm

+0

はい、オブジェクトの他のプロパティと同様です。あなたは '@ IBOutlet'ビットを省略することができることを除けば、あなたは' @ IBOutlet'と同じように、 – Paulw11

答えて

0

それは簡単です上の任意の明確化を感謝しています。

UIViewControllerで直接あなたのUI要素を初期化します。例えば

private let yourLabel: UILabel = { 
     let label = UILabel() 
     label.text = "Text" 
     label.translatesAutoresizingMaskIntoConstraints = false 
     return label 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     setupViews() 
    } 

    private func setupViews() { 
     view.addSubview(yourLabel) 
     // Setup constraints for yourLabel 
    } 

次にコントローラコードでyourLabelどこにアクセスします。これはすべてのUIコンポーネントで機能します。

注記!

あなたは、セットアップのすべてのビューではないコントローラではなく、別のビューにすることができます。そして、コントローラに1つのビュー(他のサブビューを含む)を追加します。この1つのビューを使用してすべてのサブビューにアクセスできます。しかし、あなたは別のビューでUIコンポーネントを作成する方法方法は同じになります:カスタムの

 let yourSubView: UILabel = { // any UI component 
     let label = UILabel() 
     label.translatesAutoresizingMaskIntoConstraints = false 
     return label 
    }() 

UIViewを分離:

class CustomView: UIView { // Separate view. Doesn't make the controller massive 

    let yourSubView: UILabel = { // any UI component 
     let label = UILabel() 
     label.translatesAutoresizingMaskIntoConstraints = false 
     return label 
    }() 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     setupViews() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    public func setupViews() { 
     addSubview(yourSubView) 
     // Setup yourSubView constraints 
    } 
} 

次にあなたがUIViewControllerCustomViewを追加し、すべてのサブビューにアクセスすることができますCustomViewである。

+0

が、間違ってthatsの、およびアーキテクチャを破るとVCをbloats。あなたはそれが正常に動作コントローラ – jackdm

+0

であなたのビューを作成するはずの。アーキテクチャの問題は第2の問題です。コントローラーにはなく、別のビューですべてのビューを設定できます。そして、コントローラに(他のサブビューを含む)1つのビューだけを追加します。この1つのビューを使用してすべてのサブビューにアクセスできます。 –

+2

@jackdm何も問題ありません。これはまさにあなたが通常行うことです。匿名関数を使用するのではなく、 'setupViews'のような関数で直接UIViewを作成することができますが、このメソッドは暗黙のうちにラップされていないオプションの使用を避けます。 View Controllerでビューを作成しない場合は、他にどこに作成しますか? – Paulw11

関連する問題