Я бы сделал контроллер табличного представления делегатом контроллера подробного представления. Затем сделайте что-то вроде этого в контроллере подробного представления:
-(IBAction) nextButtonClicked:(id)inSender {
NSDictionary *data = [delegate detailView:self nextDetailsForCurrent:myDetails];
if ( data ) [self setDetails:data];
}
Вы можете создать гораздо более надежный протокол делегирования, чем этот упрощенный метод, но, надеюсь, это поможет вам начать работу.
Edit:
В делегате нет ничего особенного. Это только один объект, который принимает решения от имени другого объекта. В Objective-C делегат обычно определяется как протокол, хотя раньше он был просто категорией NSObject.
Создайте протокол делегирования следующим образом:
@protocol DetailDelegate <NSObject>
-(NSDictionary *) detailController:(DetailController *)sender nextDetailsForCurrent:(NSDictionary *)current;
@end
Дайте контроллеру подробного вида свойство, подобное этому:
@property (nonatomic,assign) id<DetailDelegate> delegate;
Обратите внимание на assign
вместо retain
. По соглашению, делегат не сохраняется, даже если он должен оставаться действительным в течение жизни другого объекта. Форма id просто означает, что объект соответствует протоколу.
Когда контроллер табличного представления создает контроллер подробного представления, он устанавливает себя в качестве делегата.