无法在 navigationItem titleView 中编辑 UISearchController UISearchBar
Can't edit UISearchController UISearchBar in navigationItem titleView
在navigationItem titleView 中设置UISearchController 搜索栏时,无法编辑搜索栏。
在我的 viewDidLoad 中,我正在配置一个 UISearchController。
self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])];
self.searchViewController.delegate = self;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.navigationItem.titleView = self.searchController.searchBar;
我无法点击搜索栏。光标不出现,也没有用户交互。
奇怪的是,如果我在本地初始化 UISearchController 而没有将其设置为 属性,那么我可以编辑搜索栏,只是没有委托回调。
self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])];
self.searchViewController.delegate = self;
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController];
searchController.delegate = self;
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;
self.navigationItem.titleView = searchController.searchBar;
另一个有趣的行为是清除按钮有效(如果在初始化时在搜索栏中设置了一些文本)。
在您的第一个代码块中,您使用 SearchViewController
标识符进行实例化。在第二个中,您使用的是 HBSearchViewController
。这表明除了使用/不使用插座之外,您的代码可能还有另一个区别。
将搜索栏设置为导航标题视图:
self.navigationItem.titleView = self.searchBarTop;
然后只需将此视图设置为导航栏的 left/right 按钮
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
我希望这对你有用!!
我在显示相关视图控制器的视图控制器中设置 self.definesPresentationContext = YES;
。
这必须在 viewWillAppear:
中设置为 self.definesPresentationContext = NO;
。
现在可以编辑呈现的视图控制器中的搜索栏。
我刚刚在我的应用程序中解决了一个非常相似的问题,我想我会分享解决方案以防现有解决方案无法为您解决。
在我的例子中,我有一个选项卡栏应用程序,选项卡中有我的自定义控制器,嵌入在导航控制器中。症状完全一样,导航栏的标题区域显示搜索栏,但不是交互式的。
我发现问题是我使用了 UITabBarController 的自定义子类并且我已经覆盖了 viewWillAppear(animated:)
方法,但忘记在实现中调用 super.viewWillAppear(animated:)
。额外的症状是,当我切换标签时,搜索栏突然变成交互式的,一切正常,只是禁用了初始标签上的交互。
我希望这对某人有所帮助。
我遇到了同样的问题。
假设您有 FirstViewController 和 SecondViewController,并且 booth 在 titleView 上有一个 UISearchBar。
为了解决这个问题,我将这段代码用于显示 UIViewController 的。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.definesPresentationContext = true
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.definesPresentationContext = false
}
在navigationItem titleView 中设置UISearchController 搜索栏时,无法编辑搜索栏。
在我的 viewDidLoad 中,我正在配置一个 UISearchController。
self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])];
self.searchViewController.delegate = self;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.navigationItem.titleView = self.searchController.searchBar;
我无法点击搜索栏。光标不出现,也没有用户交互。
奇怪的是,如果我在本地初始化 UISearchController 而没有将其设置为 属性,那么我可以编辑搜索栏,只是没有委托回调。
self.searchViewController = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([SearchViewController class])];
self.searchViewController.delegate = self;
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchViewController];
searchController.delegate = self;
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;
self.navigationItem.titleView = searchController.searchBar;
另一个有趣的行为是清除按钮有效(如果在初始化时在搜索栏中设置了一些文本)。
在您的第一个代码块中,您使用 SearchViewController
标识符进行实例化。在第二个中,您使用的是 HBSearchViewController
。这表明除了使用/不使用插座之外,您的代码可能还有另一个区别。
将搜索栏设置为导航标题视图:
self.navigationItem.titleView = self.searchBarTop;
然后只需将此视图设置为导航栏的 left/right 按钮
UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
我希望这对你有用!!
我在显示相关视图控制器的视图控制器中设置 self.definesPresentationContext = YES;
。
这必须在 viewWillAppear:
中设置为 self.definesPresentationContext = NO;
。
现在可以编辑呈现的视图控制器中的搜索栏。
我刚刚在我的应用程序中解决了一个非常相似的问题,我想我会分享解决方案以防现有解决方案无法为您解决。
在我的例子中,我有一个选项卡栏应用程序,选项卡中有我的自定义控制器,嵌入在导航控制器中。症状完全一样,导航栏的标题区域显示搜索栏,但不是交互式的。
我发现问题是我使用了 UITabBarController 的自定义子类并且我已经覆盖了 viewWillAppear(animated:)
方法,但忘记在实现中调用 super.viewWillAppear(animated:)
。额外的症状是,当我切换标签时,搜索栏突然变成交互式的,一切正常,只是禁用了初始标签上的交互。
我希望这对某人有所帮助。
我遇到了同样的问题。
假设您有 FirstViewController 和 SecondViewController,并且 booth 在 titleView 上有一个 UISearchBar。
为了解决这个问题,我将这段代码用于显示 UIViewController 的。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.definesPresentationContext = true
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.definesPresentationContext = false
}