2011-06-17 77 views
0

我有一個應用程序,它具有充當視圖控制器的主視圖。這個主視圖上有3個按鈕。我有3個子視圖,我可以通過3個按鈕控制這個主視圖。每個子視圖都有一個按鈕。當按下此按鈕時,我希望它禁用主視圖上的3個按鈕,直到再次按下該按鈕。有沒有辦法在視圖之間發送消息來禁用按鈕?如何將消息發送到不同視圖的按鈕?

回答

0

使用NSNotifications發佈按鈕被按下的通知。

[[NSNotificationCenter defaultCenter] postNotificationName:@"Button1Pressed" object:self userInfo:info]; 

然後添加觀察者,以便他們監聽這些通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonPress:) name:@"Button1Pressed" object:nil]; 

現在實行buttonPress

閱讀HERE的NSNotification手動和學會使用它。

+0

好的,我試圖理解這一點。請耐心等待,我對Objective C相當陌生。在我的主視圖中,在viewDidLoad中,我放置了觀察者(如上所示)和removeObserver。在3個子視圖中的一箇中,我將postNotification放置在buttonPress方法中。我沒有收到任何警告或錯誤,但是當我按下按鈕時什麼都沒有發生。有任何想法嗎? – tombuarts 2011-06-17 23:41:33

+1

好的,我想出了我的錯誤。我在錯誤的地方刪除了Observer。我把它移到(void)dealloc中,它很好用。非常感謝您的幫助。 – tombuarts 2011-06-18 00:30:16

1

這聽起來像是切換到我。更像一個設置。如果你想一想,這應該在NSUserDefaults。而當你特定的視圖來了,大概在viewWillAppear:viewDidAppear:,爲此,

BOOL controlsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"ControlsEnabledKey"]; 

button1.enabled = controlsEnabled; 
button2.enabled = controlsEnabled; 
button3.enabled = controlsEnabled; 

要節省按下按鈕的價值,

BOOL controlsEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"ControlsEnabledKey"]; 

[[NSUserDefaults standardUserDefaults] setBool:!controlsEnabled forKey:@"ControlsEnabledKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

由於boolForKey:將返回NO如果找不到密鑰,我建議您在應用程序啓動時將值設置爲YES,如果您希望在啓動時啓用控件。

0

將主視圖/控制器設置爲內部視圖的代表,定義一個協議,在該協議中定義一個方法,例如toggleMainButtons,使VC符合該協議並實現該消息。在按鈕上,addTarget:self.delegate action:@selector(toggleMainButtons) forControlEvents:UIControlEventTouchUpInside

相關問題