在IB中,我在UIScrollView中创建了UIView。两者的文件所有者是名为JLViewController的UIViewController。 UIView连接到BodyClock类。
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 :(得分:0)
此:
id viewController = [self nextResponder];
没有做你认为它正在做的事情。这不会获得视图的控制器,而是查看响应者链并确定哪个是响应事件的下一个 - 这些通常是视图或控件(不要与控制器混淆)。在您的热点视图之后,看起来是scoll视图。
你必须得到指向控制器的指针。也许在您的热点视图中,您可以添加:
IBOutlet JLViewController *viewController;
在界面构建器中将此连接到您的视图控制器。