gpt4 book ai didi

ios - UISearchDisplayController 不在 iPad 上显示结果 TableView

转载 作者:可可西里 更新时间:2023-11-01 01:44:30 25 4
gpt4 key购买 nike

我想在带有 MKMapView 的自定义 UIViewController 中使用 UISearchDisplayController。

我在导航栏中显示 UISearchBar。

在 iPhone 上一切正常,但在 iPad 上,结果的 TableView 没有显示,即使在弹出窗口中也是如此......我只想显示这个 tableview......

(所有委托(delegate)都已正确初始化)

通过调试,我知道TableView存在(在searchDisplayController中有一个地址)

self.searchDisplayController.searchResultsTableView;

编辑:

我在 Interface Builder 中设置了所有设置,除了在导航栏中插入 searchBar。我只是以编程方式完成的:

self.searchDisplayController.displaysSearchBarInNavigationBar = YES;

我不明白,为什么在 iPhone 中显示了 tableView 而在 iPad 中却没有!

编辑 2:

如果我删除导航栏中的插入(上面引用的最后一行代码),则会显示 tableView,但会全屏显示而不是弹出窗口。

最终编辑:

没有解决方案,我尝试了不同的方法:我将我的 View 嵌入到 SplitView 中,在主视图中使用 Research,在 detailView 中使用 MapView。它有效,但看起来与预期的不同..

答案是:

使用 swift 和 iOS 8,我重建了我的应用程序,并找到了一个解决方案来很好地完成这项工作。

    if let tableView = self.searchDisplayController?.searchResultsTableView {
tableView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.bounds.width, height: self.view.bounds.height)
self.view.addSubview(self.blurEffectView!)
}

最佳答案

@Jeremy 感谢您的回答。我是 iOS 新手,您的回答帮助我摆脱了这个问题。这是一个可能对其他人有帮助的更新。

将这段代码包含在 ViewDidLoad 中以保存原始 View 的副本

originalView = self.view;

为 searchDisplayController 添加以下两个委托(delegate)方法将解决您的问题。如果您将 searchBar 放在 NavigationBar 中,则使用

UIEdgeInsetsMake(70, 0, 0, 0)

否则使用UIEdgeInsetsZero

 - (void)searchDisplayController:(UISearchDisplayController *)controller  didShowSearchResultsTableView:(UITableView *)tableView
{
if (OSVersionIsAtLeastiOS7() && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) {
if (([originalView isEqual:self.view])) {
self.view = controller.searchResultsTableView;
controller.searchResultsTableView.contentInset = UIEdgeInsetsMake(70, 0, 0, 0);
[self.searchDisplayController.searchBar becomeFirstResponder]; // This will retain the keyboard after keypress
}
}
}

要随时显示原始 View ,请使用 self.view = originalView;在我使用的这个委托(delegate)方法中,如果搜索文本为空,则显示原始 View 而不是黑屏。

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
if ([searchString isEqualToString:@""]) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
self.view = originalView;
}
}
else{
[self filterContentForSearch:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
}
return YES;
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
originalView.alpha = 0.5f;
}

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{
originalView.alpha = 1.0f;
}

关于ios - UISearchDisplayController 不在 iPad 上显示结果 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com