Предположим, у вас есть UISearchBarDelegate
метод в UIViewController
с именем SearchViewController . Чтобы нажать (DetailViewController*) dvc
, реализуйте эти методы в SearchViewController :
#pragma mark - Search bar delegate
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (searchTextMatchedSomeTarget) {
textForDetailView = searchText;
[self performSegueWithIdentifier:seguePushDetailView sender:self];
}
}
#pragma mark - View lifecycle
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:seguePushDetailView]) {
dvc = (DetailViewController *)[segue destinationViewController];
dvc.delegate = (id)self;
dvc.searchText = textForDetailView;
}
}
#pragma mark - Detail view controller protocol delegate
- (void)DetailViewControllerDidFinish:(DetailViewController *)controller
{
NSString *somethingBackFromDetailView = controller.backToSearchView;
}
UIDetailViewController
объявляет протокол с методом «завершить» и свойствами любого типа, которые вам нравятся, как для получения данных из SearchViewController , так и для отправки любых данных после любого обработка деталей. Переход добавлен в Xcode IB путем перетаскивания элемента управления с UISearchViewController
до UIDetailViewController
. NB: источником и назначением segue являются сами контроллеры представления. Таким образом, они могут быть вызваны программно, а не автоматически при событии касания.