如何将子视图的代理设置为superviews控制器

问题描述:

在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

此:

id viewController = [self nextResponder]; 

没有做什么你觉得它在做什么。这并没有得到视图的控制器,而是查看响应者链并确定下一个响应事件 - 这些通常是视图或控件(不要与控制器混淆)。看起来在你的热点视图之后,下一个scoll视图。

你必须得到正确的控制器指针。也许在你的热点视图,你可以添加:

IBOutlet JLViewController *viewController; 

然后在界面生成器连接到您的视图控制器。