iPhone如何默认隐藏UITableView搜索栏?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (180)

我使用Interface Builder创建了一个表格视图,我添加了该库的搜索栏和搜索显示控制器来添加搜索功能。但是,IB将其设置为在视图第一次显示时可以在屏幕顶部显示条。

我想知道如何让搜索栏在默认情况下隐藏,但仍然可以使用表格视图进行滚动(例如,请参阅Apple的Mail应用程序)。我已经调用scrollRectToVisible:animated:viewDidLoad滚动表中查看了下来但没有用。默认情况下隐藏搜索栏的首选方式是什么?

提问于
用户回答回答于

首先确保将UISearchBar添加到UITableView的tableHeaderView中,以使其与表格的内容一起滚动并且不固定到视图的顶部。

搜索栏不计为tableview中的一行,因此如果将tableview的顶部滚动到第一行,它会隐藏搜索栏:

[yourTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

或在Swift中:

yourTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)

确保在包含数据之前不要滚动tableview(scrollToRowAtIndexPath如果给定的indexPath不指向有效行(即,如果tableview为空))会引发异常)。

用户回答回答于

不要'添加UISearchBar作为UITableView的子视图,这不是必需的。

UITableView有一个tableHeaderView属性,非常适合这个:

- (void) viewDidLoad {
    [super viewDidLoad]; 
    self.searchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
    self.searchBar.showsCancelButton = YES;    
    self.searchBar.delegate = self;
    self.tableView.tableHeaderView = self.searchBar;     
}

如果你不想在默认情况下看到它:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView setContentOffset:CGPointMake(0, 44)];
}

我也得到取消按钮来再次隐藏(并删除键盘)

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
    [self.searchBar resignFirstResponder];
}

扫码关注云+社区

领取腾讯云代金券