2015-10-28 62 views
0

我在ViewController.swift按鈕:顯示/隱藏的UIButton在另一個控制器

@IBOutlet weak var exampleButton: UIButton! 

我想顯示/隱藏從AppDelegate中,具體的事情發生時,該按鈕(即應用程序進入後臺等等。)。 我該怎麼做?

回答

11

一種方法可以 - 您可以使用通知在這個

添加觀察在您的視圖控制器,其中按鈕需要隱藏

NSNotificationCenter.defaultCenter().addObserver(
    self, 
    selector: "hideButton", 
    name: @"HIDE_BUTTON_NOTIFICATION", 
    object: nil) 



func hideButton() -> Void { 
    // Hide your button here 
    // Remember to hide on main thread 
} 

從任何你想要的隱藏按鈕(如從AppDelegate),您可以發佈此通知

NSNotificationCenter.defaultCenter().postNotificationName(@"HIDE_BUTTON_NOTIFICATION", object: nil) 
+0

謝謝你,聽起來像一個神奇的方式來做我想要的! – MeV

+1

我唯一對此的評論是某些遠程對象不應該「控制」其他視圖的UI。稍後,您可能會有兩個視圖根據某些條件做不同的事情。發佈驅動視圖控制器的條件(狀態) - 可能是「LoggedIn」或「NotLoggedIn」,然後在需要時採取適當的操作。爲了使通知中的單個UI對象具有特定的「代碼味道」,稍後會引起您(或其他人)的問題。 –

+0

謝謝大衛。我明白,我會嘗試將這些動作組合在一個地方/功能中,以避免不同的行爲。謝謝!! :-) – MeV

1

而不是讓另一個對象直接操作它,請使用通知來指示狀態更改。狀態決定按鈕是否顯示。

確保在通知偵聽器中只觸摸主線程上的按鈕。

+1

謝謝,我將使用通知! – MeV

1

通知是一個好主意,但如果您的ViewController不是您的初始ViewController,或者尚未初始化,該怎麼辦?它將無法捕獲此通知。擴展到其他答案的可能解決方案(可能不是優雅)是提供一個標誌。您的ViewController將會檢查它,例如在viewDidLoad()。您的標誌可以存儲在一個單獨的對象中,該對象將從AppDelegate捕獲通知。總之,你應該在你的ViewController中添加通知觀察者,從AppDelegate捕獲事件。 (像在其他答案)

創建單身類來存儲適當的信息。在viewDidLoad 檢查條件:

if YOUR_SINGLETON.YOUR_FLAG == true { 
    showButton() 
} else { 
    hideButton() 
} 

不要忘了還加通知觀察員在單例類。

+1

絕對需要!我同意你的觀點,很好的觀察。非常感謝你 :-) – MeV