Панель отображения Pull-To-Refresh и search

Мне интересно, какое решение лучше всего подходит для действия pull down: Pull-To-Refresh vs. Pull-To-Search? Что делать, если я хочу иметь как (панель поиска, так и обновление), как в приложении "Почта"? Не знаю, как выглядит утверждение в магазине приложений...

Как вы реализуете это с помощью UITableViewController?

Ответ 1

Вы можете легко и легко отображать Pull-To-Refresh и Pull-To-Search в UITableViewController.

Здесь Pull to Refresh:

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 вообще!

Ответ 2

Вот как это работает для Swift 2 с помощью UISearchController:

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

}

Убедитесь, что Refreshing включен.

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

Первый ответ на этот вопрос помог: Как реализовать UISearchController в UITableView - SWIFT

Я также нашел этот учебник полезным: http://www.appcoda.com/custom-search-bar-tutorial/