Как установить делегата подпредставления на контроллер superviews - PullRequest
0 голосов
/ 08 ноября 2010

В IB я создал UIView внутри UIScrollView. Владельцем файла для обоих является UIViewController с именем JLViewController. 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];
  }

Все работает за исключением того, что отклика ToSelector не удается. Если я NSLog viewController или self.delegate я получаю ...

UIScrollView: 0x7443c20; рамка и т. д.

Я ожидал JLViewController: вместо UIScrollView: так что я думаю, что это проблема.

Как мне установить делегата для ViewController для этих подпредставлений?

Возможно ли, или я должен вместо этого использовать уведомление?

1 Ответ

0 голосов
/ 08 ноября 2010

Это:

id viewController = [self nextResponder];

не делает то, что вы думаете, что делает.Он не получает контроллер представления, а вместо этого просматривает цепочку респондентов и определяет, какой из них будет следующим для реагирования на события - обычно это представления или элементы управления (не путать с контроллерами).Похоже, что после просмотра «горячей точки» будет отображаться прокрутка.

Вам нужно будет правильно указать указатель на контроллер.Может быть, в вашем горячем месте вы можете добавить:

IBOutlet JLViewController *viewController;

И в конструкторе интерфейсов подключите это к вашему контроллеру представления.

...