如何将子视图的代理设置为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?
是否有可能,或者我应该使用通知?
答
此:
id viewController = [self nextResponder];
没有做什么你觉得它在做什么。这并没有得到视图的控制器,而是查看响应者链并确定下一个响应事件 - 这些通常是视图或控件(不要与控制器混淆)。看起来在你的热点视图之后,下一个scoll视图。
你必须得到正确的控制器指针。也许在你的热点视图,你可以添加:
IBOutlet JLViewController *viewController;
然后在界面生成器连接到您的视图控制器。
我仍然对如何做到这一点感兴趣,但已经通过使用NSNotificationCenter解决了我的问题。非常容易实施,效果很好。 – user278859 2010-11-08 03:08:55