2017-09-06 21 views
-1

別のビューコントローラで1つのビューコントローラのボタンのユーザー操作を無効にしようとすると問題が発生します。別のビューコントローラで1つのビューコントローラのボタンを無効にする

私はここで同様の質問を検索しましたが、古くなったり、役に立たないようです。 How to access an IBOutlet from another class

btnFirst.isUserInteractionEnabled = false 

か試してみてください。

class ViewControllerA() { 

    @IBOutlet weak var btnFirst: UIButton! 
    @IBOutlet weak var btnSecond: UIButton! 
    @IBOutlet weak var btnThird: UIButton! 

    override func viewDidLoad() { 
    var vcB = ViewControllerB() 
    vcB.closure = { 
    // Meet some condition, want to disable buttons of ViewControllerA here 
    } 
    } 

} 

class ViewControllerB() { 
    var closure:() -> Void = {} 
    // Do something with closure here 
} 

私の問題は、私は閉鎖にブレークポイントを設定するなどのボタンを無効にするには、クロージャ内で直接IBOuletを使用しようということで、次のように

私のシナリオがありますViewControllerBの終了時にViewControllerAのプロパティを設定し、このプロパティが変更されるたびにViewControllerAのボタンを有効または無効にするたびにプロパティobserverを使用します。

私の問題は、ボタンが有効な場合でもボタンをクリックできることです。申し訳ありませんが、私はコードを投稿できません、助けてください!

おかげ

+0

あなたがしていることのコードを投稿する必要があります!さもなければ私達はあなたが間違いをしているのを見ることができません! – Siyavash

答えて

0

あなたが任意の関連するコードを投稿していなかったので、私は起きているかもしれないものを推測することができます

を、私はあなたが正しいのViewControllerのbtnFirstにアクセスしていないことを前提としています。 ViewControllerA.viewDidLoadでは、新しいインスタンス「ViewControllerB」を作成し、クロージャを設定します。このビューコントローラのビューも正確に表示していますか?または、ユーザーはどのようにBにナビゲートしますか?ストーリーボードセグを使用している場合、新しいBインスタンスが作成され、そのビューが表示されます。今度は、Aでクロージャを実行すると、表示されているBではなく、最初のBのボタンが無効になります。あなたは2番目のビューコントローラからの通知を掲示し、その特定のためのオブザーバを追加することができます

1

しかし、これはまだ単なる推測ですが...最初のビューコントローラに通知を掲載しました。

このオブザーバー方法では、最初のビューコントローラーのボタンのユーザー操作を無効にするなどの操作を行うことができます。

関連する問題