2012-09-13 61 views
0

我有一個用於顯示彈出窗口(在iPhone上)的自定義UIView。在popover中有一些UIButtons,我需要從ViewController的類(不是UIView的類,但顯示UIView的View)調用方法。iOS Subclassed UIView - 如何從ViewController的UIButton調用方法?

如何正確設置呢?位於自定義UIView類

的UIView按鈕代碼:

UIButton *logoutButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [logoutButton setTitle:@"Logout" forState:UIControlStateNormal]; 
    [logoutButton setFrame:CGRectMake(0, 0, content.frame.size.width, 44)]; 
    [logoutButton addTarget:self.superview.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside]; 
    [logoutButton setBackgroundImage:redImage forState:UIControlStateNormal]; 
    [logoutButton setBackgroundImage:redImageHighlight forState:UIControlStateHighlighted]; 
    [logoutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [content addSubview:logoutButton]; 
+0

視圖不應該負責非觀看邏輯諸如呈現酥料餅。您應該處理按鈕的觸摸事件和視圖控制器,並從那裏呈現彈出窗口。 – titaniumdecoy

回答

2

要做到這一點,最好的方法是使用代理模式在你的UIView子類時,按下你的註銷按鈕,通知車主。當您在視圖控制器中創建視圖的實例時,將該委託設置爲self。

結帳「編寫自定義的代表們在http://enroyed.com/ios/delegation-pattern-in-objective-c-and-writing-custom-delegates/

無法可以訪問連接到你試過在代碼中做上述方式上海華的視圖控制器。

或者,你可以發佈一個通知。例如。發送應用程序範圍的消息,指出應該執行註銷。檢查NSNotificationCenter如何做到這一點。

喜歡的東西:

[[NSNotificationCenter defaultCenter] postNotificationName:kShouldLogOutNotification object:nil]; 

編輯:你一定會想在你的用例使用委託。

+0

儘管技術上可行,但通知是解決此問題的錯誤方法。 – titaniumdecoy

+0

@titaniumdecoy同意,代表是要走的路。 –

0

好了,所以我相信,創建自定義的委託是來處理這個問題的正確方法。 不過,我也發現,這種方法可以正常工作(不知道這是「正確的」,雖然)

[logoutButton addTarget:self.superview action:@selector(logout) forControlEvents:UIControlEventTouchUpInside]; 

這似乎告訴按鈕,使用它的類(視圖控制器)是上海華盈(UIView的)。 同樣,不知道這是調用從主視圖控制器的方法適當/正確的方法,但如此看來可用它的工作原理沒有問題。

相關問題