UISearchBar 与 NavigationBar 上的隐藏 TableView

Posted

技术标签:

【中文标题】UISearchBar 与 NavigationBar 上的隐藏 TableView【英文标题】:UISearchBar with hidden TableView on NavigationBar 【发布时间】:2014-12-06 01:37:49 【问题描述】:

我正在尝试在 NavigationBar 上创建一个带有 searchBar 的视图,我希望这个 searchBar 在键入开始后立即打开一个带有搜索结果的 tableView,并在触摸项目后将其隐藏。我是这个平台的新手,所以我只需要一个可以遵循的路径,我不知道从哪里开始。

【问题讨论】:

你为什么不试试 UISearchController? 我试过了,但是关联的 tableView 仍然在视图的其余部分之上,我希望它在搜索之前隐藏 其实很简单。虽然 UISearchController 是要走的路。解决方法是在 tableviewheader 中添加搜索栏,并设置 tableviews 内容偏移搜索栏的高度。 请注意,通过以您希望的方式以编程方式插入它,您还必须通过代码执行所有其他视图。您将必须填充显示来自用户插入的文本的搜索结果的表格视图。这就是 UISearchController 是要走的路。 @JoãoMiranda 查看我的编辑以进行快速自定义 【参考方案1】:

根据我的评论:这是更深入的解释。快乐编码:

.h

@interface TableViewController : UITableViewController <UISearchBarDelegate>

@property (strong, nonatomic) UISearchBar *searchBar;

@end

.m

- (void) viewDidLoad:(BOOL)animated 

UIView *searchbarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; //This adds a container that will hold the search bar. 
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; 
self.searchBar.delegate = self;
[searchbarView addSubview:self.searchBar];
self.tableView.tableHeaderView = searchbarView; //Inserts UIView into the header of self.tableView
[self.tableView setContentOffset:CGPointMake(0, 44)];

差不多就是这样。如果您想自定义其他内容,例如键盘布局和文本填充方式以及颜色、字体和占位符文本等,您可以在 viewDidLoad 中编辑它或创建一个子类

编辑我在下面包含了一些用于自定义的示例代码:

self.searchBar.keyboardAppearance = UIKeyboardAppearanceDark;
self.searchBar.returnKeyType = UIReturnKeySearch;
self.searchBar.searchBarStyle = UISearchBarStyleProminent;
self.searchBar.barTintColor = [UIColor lightGrayColor];
self.searchBar.placeholder = @"Search for queries here";
self.searchBar.showsCancelButton = YES;
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                                                              [UIColor blueColor],
                                                                                              NSForegroundColorAttributeName,
                                                                                              nil]
                                                                                    forState:UIControlStateNormal];

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
self.searchBar.showsCancelButton = NO;
[self.searchBar resignFirstResponder];

【讨论】:

【参考方案2】:

您可以在顶部创建一个带有 UISearchBar 的视图,然后创建一个 UITableView(最初是隐藏的)并将其添加到您现有的视图中。隐藏导航栏将给出与 UISearchController 相同的外观。然后,您可以在用户开始搜索时在搜索栏委托中显示表格视图。

【讨论】:

以上是关于UISearchBar 与 NavigationBar 上的隐藏 TableView的主要内容,如果未能解决你的问题,请参考以下文章

UISearchBar:传递数据;单击的标题与 ListViewController - Swift 中显示的数据不对应

当 UIPopoverController 在屏幕上时,无法与带有 UIPopoverController 的 UISearchBar 进行交互

NavigationItem + UISearchBar 与 Swift

UISearchBar 与状态栏动画过渡错误 ios7

UISearchBar 最小样式与范围按钮错误?

iPhone UITableView 与 UISearchBar 和刷新部分索引