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 进行交互