Эта проблема возникает из-за того, что вы просто используете один Navigation Controller, упаковывающий ваш TabbarController. Когда пользователь вводит второй элемент панели вкладок (Поиск), вы инициализируете UISearchController
и устанавливаете для него NavigationItem
s SearchController
. Таким образом, эта строка поиска отображается так, как вы хотите.
Но когда вы вернетесь к контроллеру Home
, этот UISearchController
останется там, поскольку вы просто используете один UINavigationController
. Добавьте приведенный ниже код в ваше событие Home
Controller ViewWillAppear()
, чтобы решить вашу проблему:
TabBarController.NavigationItem.SearchController = null;
Я действительно рекомендую вам разделить ваш UINavigationController
на четыре в вашей ситуации. Тогда каждый контроллер элемента панели вкладок имеет свой собственный NavigationItem
и не будет влиять друг на друга. UITabbarController
должен быть корневым ViewController вашего приложения. Иерархия вашего приложения может быть такой:
Я использую раскадровку, чтобы нарисовать два элемента на вкладке, чтобы вы поняли, о чем я.
Таким образом, в контроллере Home нет необходимости добавлять какой-либо код. Вы можете просто добавить строку поиска в свой контроллер поиска с кодом:
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()
и изменяю TabBarController.NavigationItem
на this.NavigationItem
.