2010-11-08 41 views
0

在IB中,我在UIScrollView中創建了UIView。兩者的文件所有者是名爲JLViewController的UIViewController。 UIView連接到BodyClock類。如何將子視圖的代理設置爲superviews控制器

BodyClock類在視圖內繪製圖形。它還創建了幾個作爲觸摸熱點的小視圖。當一個熱點被觸摸時,它會顯示一個提示信息,並帶有一個按鈕以獲取更多詳細信息。我需要告訴JLViewController顯示詳細信息。我想我可以通過使ViewController成爲HotSpot的代表來實現這一點。作爲我在BodyClock類中創建熱點的方式,我無法弄清楚如何將熱點代理設置爲JLViewController。我試圖做這樣的事情..

//Code in BodyClock 
//create the hot spot 
    id viewController = [self nextResponder]; 
    HelpHotSpot *helpHotSpot = [[HelpHotSpot alloc] initWithFrame:CGRectMake(start_x, melatoninHeightEnd_y, 80, 40)]; 
    helpHotSpot.delegate = viewController; 
    [viewController addSubview:helpHotSpot]; 
    [helpHotSpot release]; 

//Code in the HotSpot after touch and request for more info 
//notify JLViewController to display the details 
    if ([self.delegate respondsToSelector:@selector(hotSpotMore:)]) { 
    [self.delegate hotSpotMore:itemDetails]; 
    } 

一切工作除了respondsToSelector失敗。如果我NSLog viewController或self.delegate我得到...

UIScrollView:0x7443c20;框架等...

我期待JLViewController:而不是UIScrollView:所以我認爲這是問題。

如何爲這些子視圖設置委託給ViewController?

是否有可能,或者我應該使用通知?

+0

我仍然對如何做到這一點感興趣,但已經通過使用NSNotificationCenter解決了我的問題。非常容易實施,效果很好。 – user278859 2010-11-08 03:08:55

回答

0

此:

id viewController = [self nextResponder]; 

沒有做什麼你覺得它在做什麼。這並沒有得到視圖的控制器,而是查看響應者鏈並確定下一個響應事件 - 這些通常是視圖或控件(不要與控制器混淆)。看起來在你的熱點視圖之後,下一個scoll視圖。

你必須得到正確的控制器指針。也許在你的熱點視圖,你可以添加:

IBOutlet JLViewController *viewController; 

然後在界面生成器連接到您的視圖控制器。

相關問題