如何将子视图的委托设置为超级视图控制器

时间:2010-11-08 01:51:45

标签: iphone xcode delegates uiviewcontroller subview

在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的委托?

是否可以,或者我应该使用通知?

1 个答案:

答案 0 :(得分:0)

此:

id viewController = [self nextResponder];

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

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

IBOutlet JLViewController *viewController;

在界面构建器中将此连接到您的视图控制器。