2017-09-06 27 views
-1

我在嘗試禁用其他視圖控制器中的1視圖控制器的按鈕用戶交互時遇到問題。在另一個視圖控制器中禁用1視圖控制器的按鈕

我在這裏搜索了類似的問題,但有些似乎過時或不適用於我: How to access an IBOutlet from another class

我的情況如下:

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在關閉禁用如按鈕:

btnFirst.isUserInteractionEnabled = false 

或者試試在ViewControllerB的閉包中設置ViewControllerA的屬性並使用屬性觀察器,只要此屬性更改,啓用或禁用ViewControllerA的按鈕。

我的問題是,我仍然可以點擊按鈕,如果它啓用。對不起,我無法發佈代碼,請幫助我!

感謝

+0

你需要發佈你在做什麼的代碼!否則,我們將無法看到你犯了什麼錯誤! – Siyavash

回答

0

既然你沒有發佈任何相關的代碼,我只能猜測到底發生了什麼:

我假設你不訪問正確視圖 - 控制的btnFirst。在ViewControllerA.viewDidLoad中,您正在創建ViewControllerB的新實例並設置關閉。你是否也完全展示了這個視圖控制器的視圖?或者用戶如何導航到B?如果您正在使用storyboard segues,則這些將創建一個新的B實例並顯示其視圖。現在當你在A中執行閉包時,這將禁用第一個B的按鈕,而不是顯示的B的按鈕。

但這仍然只是一個猜測...

1

您可以從第二個視圖控制器發佈通知,併爲特定的觀察者添加在第一個視圖控制器發佈通知。

在該觀察者方法中,您可以執行一些操作,如禁用第一個視圖控制器的按鈕的用戶交互。

相關問題