使用"搜索栏"取消按钮关闭模态视图控制器

Tom*_*idd 6 uisearchbar modalviewcontroller ios uisearchcontroller

我有一个带有搜索栏和tableview的模态视图控制器,基本上是一个弹出式搜索框,使用pop-over segue呈现.在顶部有一个带取消按钮的UISearchBar.我正在尝试使用该搜索栏上的取消按钮关闭视图控制器.

我尝试了很多方法......

-(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

和委托方法

[self.delegate dismissModalViewController:self]
Run Code Online (Sandbox Code Playgroud)

-(void) dismissModalViewController:(UIViewController*) viewToDismiss
{
    [viewToDismiss dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

我不知道UISearchBar是否在干扰,但这似乎是一个合理的假设.否则这是一个常见的话题,我为提出一个之前可能已经回答的问题而道歉但是我已经阅读了fm并用谷歌搜索直到我是蓝色的并且仍然没有结果.

Mar*_*moy 9

我在UIPopoverPresentationController中经历了同样的事情,我在其中使用UISearchController来过滤tableview.

问题是,你第一次叫dismissViewController它驳回UISearchController,但对用户界面没有影响,所以很容易让人联想到什么都没有发生.如你所说,这就是UISearchBar的干扰.

一个解决方案是两次调用dismissViewController(我不喜欢这个),或者调用searchController.dismissViewController,然后调用self.dismissViewController.

Swift 3示例......

if searchController.isActive {
    searchController.dismiss(animated: true, completion: { 
        self.dismiss(animated: true) 
    })
} else {
    dismiss(animated: true)
}
Run Code Online (Sandbox Code Playgroud)