我有一个TableViewController,一个SearchResultsController和一个WebViewController。当我单击TableViewController中的单元格时,它将推动WebViewController打开与该单元格相关的网址。
TableViewController有一个UISearchController,可以将结果过滤到SearchResultsController中,但是当在SearchResultsController中单击一个单元格时,WebViewController不会被推送。
这是SearchResultsController的didSelectRowAtIndexPath的代码:
- (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中。我仍然是应用程序开发的新手,无法弄清楚如何或在何处执行此操作。
我像这样在TableViewController的viewDidLoad中调用SearchResultsController:
- (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的地方吗?
最佳答案
进行搜索时,您将展示NewModalViewController,因此,您需要做的很简单的就是在展示搜索控制器时推送ViewController的一些步骤
1)self.definesPresentationContext = YES;
在这之后,你应该像这样推你的viewcontroller
2)[self.presentingViewController.navigationController pushViewController:sec动画:是];
注意:当前的modalviewcontroller没有导航控制器,因此正常的推式编码不会起作用,因为它没有分配给导航。
请享用.....