【问题标题】:Pull-To-Refresh and search bar下拉刷新和搜索栏
【发布时间】:2014-08-07 22:24:27
【问题描述】:

我想知道哪种解决方案最适合下拉操作:下拉刷新与下拉搜索?如果我想在邮件应用程序中同时拥有(搜索栏和刷新)怎么办?不知道app store里的审批长啥样……

您将如何使用UITableViewController 实现它?

【问题讨论】:

  • 您为什么担心应用商店的审批? UIRefreshControlUISearchDisplayController 都是内置功能。
  • 不要那样做。这是邪恶的用户体验。

标签: ios


【解决方案1】:

您可以很容易地在 UITableViewController 中同时使用 Pull-To-Refresh 和 Pull-To-Search。

这里是拉刷新:

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
[self.tableView addSubview:refresh];
self.refreshControl = refresh;

要知道它何时被“拉”,向控件添加一个目标:

[self.refreshControl addTarget:self action:@selector(refreshContent:) forControlEvents:UIControlEventValueChanged];

这里是“Pull-To-Search”:

UISearchBar *searchBar = [[UISearchBar alloc] init];
UISearchDisplayController *searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
self.tableView.tableHeaderView = searchBar;
self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(searchBar.frame));

如您所见,Pull-To-Search 实际上只是将 searchBar 添加为 tableHeaderView 并最初偏移 tableView 一点,因此最初不显示搜索栏。这根本不会干扰 Pull-To-Refresh!

【讨论】:

  • UISearchDisplayController 在 iOS 8 中已弃用,请改用 UISearchController。
  • 正如 Siegfoult 所说,UISearchDisplayController 在 iOS 8 中已弃用。我从 Apple 找到了一个官方示例,如何实现搜索“新”方式:developer.apple.com/library/ios/samplecode/…
  • 这成功了!为什么我们需要将 refreshControl 作为子视图添加到 tableView 中才能工作?
  • 从技术上讲,拉动刷新适用于任何 UIScrollView,但只有 UITableView 具有 refreshControl 属性,如果我没记错的话,甚至不需要设置。 UICollectionView 没有它,但这个控件非常适合它。基本上,UIScrollView 中有一些魔力,可以在其子视图中寻找这种控制并使事情正常进行。抱歉,这含糊不清,但就像我说的那样,它有点魔法和黑匣子,所以我不太清楚。
【解决方案2】:

下面是使用 UISearchController 在 Swift 2 上的工作方式:

class YourTableViewController: UITableViewController, UISearchResultsUpdating {

let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
    super.viewDidLoad()

    // Initialize the refresh control
    self.refreshControl!.addTarget(self, action: #selector(YourTableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)

    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.sizeToFit()
    self.tableView.tableHeaderView = searchController.searchBar
    self.tableView.contentOffset = CGPointMake(0, CGRectGetHeight(searchController.searchBar.frame));

}

".refresh(_:)" 指的是

func refresh(sender:AnyObject)
{
//Load Data

}

确保启用刷新。

http://i.stack.imgur.com/e1K34.png

这个问题的第一个答案有帮助:How to implement UISearchController in UITableView - SWIFT

我还发现本教程很有帮助:http://www.appcoda.com/custom-search-bar-tutorial/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多