1

数ヶ月前、私はUISearchDisplayController を表示するように質問しましたが、それは魅力的に機能しましたが、

ユーザーがsearchResultsControllerのtableviewセルをタップした後、別のコントローラーを提示しています。セルを選択し、searchResultsControllerを非表示にしてMapViewを表示しますが、検索バーをタップするとsearchResultsControllerは表示されませんが、キャンセルボタンを押して検索バーをもう一度タップするとそれは再び働き始めます。

シナリオはまさに Apple の Maps アプリで、最近の View Controller とセグメントを使用してお気に入りのビューを開きます。

UISearchControllerDelegate のコードは次のとおりです。

- (void)willPresentSearchController:(UISearchController *)searchController
{
    mainViewController *__weak weakSelf=self;
    dispatch_async(dispatch_get_main_queue(), ^{
        mainViewController *__strong strongSelf = weakSelf;
        strongSelf.searchController.searchResultsController.view.hidden = NO;
    });
}

- (void)didPresentSearchController:(UISearchController *)searchController
{
    self.searchController.searchResultsController.view.hidden = NO;
}

そして、これがUISearchBarDelegateの私のコードです。

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{

    mainViewController *__weak weakSelf=self;
    dispatch_async(dispatch_get_main_queue(), ^{
        mainViewController *__strong strongSelf = weakSelf;
        strongSelf.searchController.searchBar.showsCancelButton = YES;
    });

    self.searchController.searchResultsController.view.hidden = NO;
    return YES;
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar{
    mainViewController *__weak weakSelf=self;
    dispatch_async(dispatch_get_main_queue(), ^{
        mainViewController *__strong strongSelf = weakSelf;
        strongSelf.searchController.searchBar.showsCancelButton = NO;
    });

    return YES;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    mainViewController *__weak weakSelf=self;
    dispatch_async(dispatch_get_main_queue(), ^{
        mainViewController *__strong strongSelf = weakSelf;
        strongSelf.searchController.searchResultsController.view.hidden = YES;
    });

    [searchBar resignFirstResponder];
    }];
}
4

0 に答える 0