2017-07-25 4 views
0

以下のコードでは、別のクラスのボタンの表示を変更できますが、button.isHiddenをfalseに変更しようとすると、ボタンは表示されませんアップ。ボタンの特性をプログラム的に変更する

ビューコントローラ1:

override viewDidLoad(){ 
    button.isHidden = true 
} 

ビューコントローラ2:

ViewController1().button.isHidden = false 

どのように私は別のコントローラ

+1

あなたがする必要があります何らかの形でボタンへの参照、またはViewController1への参照を持っています。それはあなたのコードをどのようにセットアップしたかによって異なります。 ViewController1とViewController2の関係は何ですか? 'ViewController1()'を使って新しい 'ViewController1'を作成すると、2つの' ViewController1'があることを意味します。したがって、元の 'ViewController1'には影響しません。 –

答えて

1

からボタンの視認性がViewController1()を呼び出すと、代わりに作業のViewController1インスタンスを作成し、変更することができますすでにインスタンス化されているViewController1インスタンス。 ViewController2からViewController1の性質を(この場合はボタン)にアクセスするために

、あなたはViewController1からViewController2にそのボタンへの参照を渡すと、その参照を使用してプロパティを変更する必要があります。

prepare(for segue)の参照をViewController1に設定する必要があります。

あなたはまた、マニュアルにセグエを設定し、あなたが ViewController2でプロパティを作成し、このようにアクセスする必要が self.performSegue(withIdentifier: "mySegue", sender: self.button)

によってViewController1でそれを呼び出す必要が

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "mySegue { 
     let nextVC = segue.destination as! ViewController2 
     nextVC.button = sender as! UIButton 
    } 
} 

class ViewController2 { 
    var button:UIButton? 

    func showButtonOnVC1(){ 
     guard let button = self.button else { return } 
     button.isHidden = false 
    } 

} 
関連する問題