Я бы предложил использовать делегирование для решения этой задачи. Установите протокол делегата, такой как URLSelectionDelegate
, который будет реализован вашим контроллером представления панели инструментов. Вам, вероятно, просто понадобится один метод, такой как -urlSelectionDelegateDidSelectItemWithURL:(NSString *)selectedItemURL
или подобный. Таким образом, ваш модальный контроллер табличного представления отвечает только за своего родителя, когда элемент был выбран, и вы сохраняете всю свою UIWebView
связанную логику в том же месте, в контроллере представления панели инструментов.
Вы должны объявить протокол делегата в его собственном файле или просто в заголовке контроллера вашей панели инструментов, например:
@protocol URLSelectionDelegate <NSObject>
- (void)urlSelectionDelegateDidSelectItemWithURL:(NSString *)selectedItemURL;
@end
Ваш контроллер веб-просмотра затем реализует этот протокол URLSelectionDelegate
, что означает, что он реализует метод urlSelectionDelegateDidSelectItemWithURL:
:
@interface TableViewController : UITableViewController <URLSelectionDelegate>
// ...
@end
Теперь вы добавите свойство к вашему контроллеру модального табличного представления с именем «Delegate» или «urlSelectionDelegate»:
@property (nonatomic, assign) id<URLSelectionDelegate> delegate;
и установите его для родительского контроллера представления при его инициализации:
// Initialize table view controller (keep your existing code)
TableViewController *vc = [[TableViewController alloc] init];
// Assign the delegate
[vc setDelegate:self];
Теперь, в вашем методе didSelectRowWithIndexPath
, вы будете вызывать метод делегата соответственно:
if ([self delegate] != nil && [[self delegate] respondsToSelector:@selector(urlSelectionDelegateDidSelectItemWithURL:)) {
[delegate urlSelectionDelegateDidSelectItemWithURL:@"http://www.google.com/";
}
Затем просто поместите логику, чтобы изменить веб-представление внутри родительского контроллера представления.
Вы можете прочитать намного больше о своих различных параметрах в "Каков наилучший способ связи между контроллерами представления?" и вы можете узнать больше о шаблоне делегирования в Objective- C в Как создать делегатов в Objective-C?