2010-11-08 3 views
0

В IB я создал UIView внутри UIScrollView. Владелец файла для обоих - это UIViewController с именем JLViewController. UIView подключен к классу BodyClock.Как установить делегата subview в контроллер супервизоров

Класс 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]; 
    } 

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

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

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

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

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

+0

Я все еще заинтересован в том, как это сделать, но уже решил проблему с помощью NSNotificationCenter. Очень прост в применении и отлично работает. – user278859

ответ

0

Это:

id viewController = [self nextResponder]; 

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

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

IBOutlet JLViewController *viewController; 

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