Xamarin.ios:搜索栏显示在每个标签栏视图中

时间:2018-04-30 23:30:14

标签: xamarin.ios tabs mvvmcross searchbar tabview

我正在使用Xamarin.ios MvvmCross构建iOS应用。在这个应用程序中,我使用标签视图。在一个选项卡视图中,我不想显示搜索栏,但此搜索栏会显示在每个选项卡视图中。有人知道如何解决这个问题,以便我可以在其他标签视图中隐藏搜索栏吗?

搜索栏标签视图:

public override void ViewWillAppear(Boolean animated)
    {
        base.ViewWillAppear(animated);
        var searchController = new UISearchController(searchResultsController: null);

        searchController.SearchBar.SizeToFit();
        searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Prominent;

        TabBarController.NavigationItem.HidesSearchBarWhenScrolling = false;
        TabBarController.NavigationItem.SearchController = searchController;

        NavigationController.NavigationBar.PrefersLargeTitles = true;
        this.Title = "Search";

        _searchBar = searchController.SearchBar;
        _searchBar.SearchButtonClicked += SearchBar_SearchButtonClicked;
        _searchBar.TextChanged += SearchBarOnTextChanged;
        _searchBar.CancelButtonClicked += SearchBarOnCancelButtonClicked;

        TabBarController.NavigationItem.RightBarButtonItem = null;
    }

带搜索栏的标签视图图片: Search

其他标签视图,我想隐藏搜索栏但无法完成搜索:

    public override void ViewWillAppear(Boolean animated)
    {
        base.ViewWillAppear(animated);

        //var searchController = new UISearchController(searchResultsController: null);
        //searchController.SearchBar.Hidden = true;

        var search = new UISearchController(searchResultsController: null);
        TabBarController.NavigationItem.HidesSearchBarWhenScrolling = true;
        search.SearchBar.Hidden = true;

        NavigationController.NavigationBar.PrefersLargeTitles = true;
        TabBarController.NavigationItem.RightBarButtonItem = null;
    }

标签视图的图片,我不想显示搜索栏: Home

1 个答案:

答案 0 :(得分:0)

出现此问题是因为您只使用一个包装TabbarController的导航控制器。当用户输入第二个标签栏项目(搜索)时,您初始化// App\Providers\BroadcastServiceProvider::class, 并将其设置为App\Providers\BroadcastServiceProvider::class, ' s UISearchController。因此,您可以根据需要显示此搜索栏。

但是当您返回NavigationItem控制器时,由于您只使用一个SearchController,因此Home仍然存在。在UISearchController控制器UINavigationController事件中添加以下代码将解决您的问题:

Home

我真的建议你在你的情况下将你的ViewWillAppear()分成四个。然后每个tabbar项目控制器都有自己的TabBarController.NavigationItem.SearchController = null; ,并且不会相互影响。 UINavigationController应该是您应用的根ViewController。您应用的层次结构可以是这样的: enter image description here 我使用故事板绘制两个tabbar项目,帮助你理解我的意思。

以这种方式在Home控制器中,不需要添加任何代码。您只需在搜索控制器中添加搜索栏,其代码为:

NavigationItem

我将您的代码移至UITabbarController事件,并将public override void ViewDidLoad() { base.ViewDidLoad(); var searchController = new UISearchController(searchResultsController: null); searchController.SearchBar.SizeToFit(); searchController.SearchBar.SearchBarStyle = UISearchBarStyle.Prominent; this.NavigationItem.HidesSearchBarWhenScrolling = false; this.NavigationItem.SearchController = searchController; NavigationController.NavigationBar.PrefersLargeTitles = true; this.Title = "Search"; _searchBar = searchController.SearchBar; _searchBar.SearchButtonClicked += _searchBar_SearchButtonClicked; ; _searchBar.TextChanged += _searchBar_TextChanged; ; _searchBar.CancelButtonClicked += _searchBar_CancelButtonClicked; ; this.NavigationItem.RightBarButtonItem = null; } 修改为ViewDidLoad()