0

У меня есть TableViewController, SearchResultsController и WebViewController. Когда я нажимаю на ячейку в TableViewController, он толкает WebViewController, открывая URL-адрес, связанный с ячейкой.Невозможно нажать на поискРезультатыController

В TableViewController есть UISearchController, который фильтрует результаты в SearchResultsController, однако, когда ячейка нажата в SearchResultsController, WebViewController не будет нажата.

Вот код didSelectRowAtIndexPath для SearchResultsController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    WebViewController *webViewController = [[WebViewController alloc] init]; 

    NSString *extensionURL = (self.searchResults[indexPath.row])[@"url"]; 
    NSURL *baseURL = [NSURL URLWithString:@"http://www.baseurl.com"]; 
    NSURL *URL = [NSURL URLWithString:extensionURL relativeToURL:baseURL]; 

    webViewController.title = (self.searchResults[indexPath.row])[@"title"]; 
    NSLog(@"%@", URL); 
    webViewController.URL = URL; 
    [self.navigationController pushViewController:webViewController 
             animated:YES]; 

} 

Я включил NSLog, чтобы увидеть, если что-нибудь случится, когда была нажата клетка, и это делает отображение URL в консоли. Это заставляет меня думать, что проблема связана с navigationController.

В режиме онлайн кажется, что UISearchController должен быть завернут в UISearchContainerViewController, который затем должен быть помещен в navigationController. Я по-прежнему новичок в разработке приложений и не могу понять, как и где это сделать.

Я называю мой SearchResultsController в viewDidLoad моего TableViewController как так:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    SearchResultsViewController *controller = [[SearchResultsViewController alloc] initWithStyle:UITableViewStylePlain]; 
    [self addObserver:controller forKeyPath:@"results" options:NSKeyValueObservingOptionNew context:nil]; 

    self.searchController = [[UISearchController alloc] initWithSearchResultsController: controller]; 
    self.searchController.searchResultsUpdater = self; 
    self.searchController.hidesNavigationBarDuringPresentation = NO; 
    self.searchController.dimsBackgroundDuringPresentation = NO; 
    self.searchController.delegate = self; 
    self.definesPresentationContext = YES; 

    UISearchBar *searchBar = [[UISearchBar alloc] init]; 
    searchBar = self.searchController.searchBar; 
    searchBar.searchBarStyle = UISearchBarStyleMinimal; 
    UITextField *searchField = [searchBar valueForKey:@"_searchField"]; 
    searchBar.barTintColor = [UIColor whiteColor]; 
    searchBar.tintColor = [UIColor whiteColor]; 

    self.navigationItem.titleView = searchBar; 

} 

Является ли это, где я должен быть вложение мой SearchResultsController?

+0

Вы используете self.navigationController в своем первом блоке кода, связанном с SearchResultsController. Убедитесь, что navigationController - тот, который вы хотите, и он должен работать. – Alex

+0

Привет, Алекс, спасибо за ответ. Не могли бы вы немного рассказать о том, что вы имеете в виду в отношении self.navigationController? – ghertyish

+0

ПоискПросмотрСвидетельствоПросмотрСоответчикНавигационный контроль отличается от диспетчера навигации TableViewController.Похоже, вы хотите использовать self.navigationController TableViewController. – Alex

ответ

9

При выполнении поиска вы представить NewModalViewController так его просто все, что вам нужно сделать, это какие-то шаги для толкая ViewController когда присутствует поиск контроллера

1) self.definesPresentationContext = YES;

После этого вы должны толкать ViewController как

2) [self.presentingViewController.navigationController pushViewController: сек анимированные: YES];

Примечание: настоящий modalviewcontroller не имеет контроллера навигации, поэтому обычное кодирование толчка не работает, поскольку оно не предназначено для навигации.

Наслаждайтесь .....

0

Вы можете создать свойство в вашем SearchResultsController:

@property (nonatomic, strong) UINavigationController *navController; 

Тогда в вашем updateSearchResultsForSearchController в вашем TableViewController установить NavController = self.navigationController.

Тогда вы можете сделать это в didSelectRowForIndexPath вашей SearchResultsController в:

[self.navController pushViewController:webViewController 
            animated:YES]; 

Этот подход работает для меня после неудачной попытки получить указанное выше решение Аруна работать.

Смежные вопросы