标签: uisearchcontroller

在取消分配时尝试加载视图控制器的视图... UISearchController

我有创建UISearchController' in my UIVIew'sviewDidLoad`的代码.

 self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.searchBar.delegate = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.hidesNavigationBarDuringPresentation = false //prevent search bar from moving
        controller.searchBar.placeholder = "Search for song"

        self.myTableView.tableHeaderView = controller.searchBar

        return controller

    })()
Run Code Online (Sandbox Code Playgroud)

在此关闭完成后,此警告将出现在控制台中:

Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UISearchController: 0x154d39700>)
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么.这个类似的问题并不是我的情况(至少我不这么认为).到底是怎么回事?

ios swift uisearchcontroller

79
推荐指数
7
解决办法
3万
查看次数

在导航栏中显示搜索栏而不在iOS 11上滚动

我将UISearchController附加到navigationItem.searchControlleriOS 11上的UITableViewController 的属性.这很好用:我可以使用漂亮的iOS 11风格的搜索栏.

但是,我想在发布时使搜索栏可见.默认情况下,用户必须在表格视图中向上滚动才能看到搜索栏.有谁知道这有可能吗?

在此输入图像描述 在此输入图像描述

左:启动后的默认情况.右:搜索栏可见(通过向上滚动).我希望在发布后可以看到搜索栏,如右侧屏幕截图所示.

我已经发现通过将hidesSearchBarWhenScrolling导航项的属性设置为false 可以使搜索栏可见.但是,这会导致搜索栏始终可见 - 即使向下滚动 - 这也不是我想要的.

uinavigationitem ios uisearchcontroller

66
推荐指数
3
解决办法
2万
查看次数

你如何解雇UISearchController?(iOS 8及以下版本)

这一定是微不足道的,但我找不到你应该如何以编程方式解雇UISearchController?

请注意,它是新的UISearchController(2014年推出iOS 8),而不是UISearchDisplayController.

到目前为止,这就是我所拥有的

// Dismiss the search tableview
searchController.dismissViewControllerAnimated()
// Clear the Search bar text
searchController.active = false
Run Code Online (Sandbox Code Playgroud)

但我仍然有取消按钮,无法摆脱它.

swift uisearchcontroller

64
推荐指数
4
解决办法
3万
查看次数

由UISearchController在表头视图中呈现的UISearchBar在活动时动画太远

我正在使用UISearchController在tableview的标题视图中显示一个搜索栏:

...
self.searchController.hidesNavigationBarDuringPresentation = NO;            
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar sizeToFit];
self.presentingTVC.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)

(需要设置tableHeaderView属性两次,否则标题视图与第一行重叠,参见SO上的几个答案)

这是它看起来的样子,在不活动时完美地处于适当位置 非活动搜索栏位于正确位置

搜索栏应该在活动时保持原位 - 我不希望它向上移动以隐藏导航栏.但它意外地动画下来,在它和导航栏之间留下一个空白:

屏幕截图显示搜索栏动画太远了

这是一个 奇怪的搜索栏动画视频

如果我只是使用与UISearchController分开的搜索栏,则它在激活时不会显示相同的行为.

在我的呈现视图控制器中,我有self.definesPresentationContext = YES;self.navigationController.navigationBar.translucent = YES;,并且在IB中没有任何"扩展边缘"框是活动的(所有这些似乎都可能使搜索演示文件无法读取).

有谁知道如何阻止搜索栏动画下来?

uitableview uisearchbar ios ios8 uisearchcontroller

56
推荐指数
7
解决办法
4万
查看次数

UISearchController iOS 11自定义

我之前使用iOS 11之前的代码来自定义UISearchController搜索栏的外观:

var searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.setDefaultSearchBar()
searchController.searchResultsUpdater = self

if #available(iOS 11.0, *) {
    navigationItem.searchController = searchController
} else {
    tableView.tableHeaderView = searchController.searchBar
}

extension UISearchBar {
    func setDefaultSearchBar() {
        self.tintColor = UIColor.blue
        self.searchBarStyle = .minimal
        self.backgroundImage = UIImage(color: UIColor.clear)
        let searchBarTextField = self.value(forKey: "searchField") as! UITextField
        searchBarTextField.textColor = UIColor.white
        searchBarTextField.tintColor = UIColor.blue
        searchBarTextField = .dark
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,更新到iOS 11并添加任何自定义的UISearchController一部分(除了键盘外观证明我的代码已被调用)无法显示.这是一个错误还是我错误地实现了它? navigationItem

编辑: 附件是运行iOS 10(第一个)和iOS 11的设备的两个屏幕截图

在此输入图像描述

在此输入图像描述

编辑2:到目前为止,关于这个问题的大部分注意力都集中在文本的颜色上UISearchBar.我在看比这更多-的背景颜色,色调的颜色,搜索指示器和清除按钮颜色等所有不能尽管是完全能够在iOS的10这么做运行iOS 11的设备上进行定制.

ios swift uisearchcontroller ios11

54
推荐指数
4
解决办法
2万
查看次数

当UISearchController处于活动状态时,iOS 9 searchBar将从表头视图中消失

结构:

View1(单击按钮) - >以模态方式呈现(MyModalView:UITableViewController)

MyModalView嵌入了UISearchController.UISearchController的searchBar放在MyModalView.tableView.tableHeaderView中.

自iOS 8.0起,它一直运行良好.但是在iOS 9上,当UISearchController处于活动状态时,searchBar会消失.请看下面这些图片

模态视图:模态视图

UISearchController在iOS 8上处于活动状态:iOS 8中的搜索栏

UISearchController在iOS 9上处于活动状态:iOS 9中的搜索栏

非常标准的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    // Dynamically create a search controller using anonymous function
    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false

        controller.searchBar.sizeToFit()
        controller.searchBar.delegate = self

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    // Auto sizing row & cell height
    self.tableView.estimatedRowHeight = 130
    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.definesPresentationContext = true

    // No footer for better presentation
    self.tableView.tableFooterView = UIView.init(frame: CGRectZero)
}
Run Code Online (Sandbox Code Playgroud)

这个问题也发生在iOS …

uisearchbar ios swift uisearchcontroller ios9

53
推荐指数
6
解决办法
3万
查看次数

无法将searchBar设置为firstResponder

我有一个searchBar我在tableviewcontroller中设置.我引用了这个类似的问题UISearchBar在UITableView重新出现之后无法成为第一响应者,但仍然无法将其设置为第一响应者.在.h文件中:

@property (strong, nonatomic) UISearchController *searchController;
@property (strong, nonatomic) IBOutlet UISearchBar *searchBar;
Run Code Online (Sandbox Code Playgroud)

在视图didload中:

self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;

self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
self.tableView.tableHeaderView = self.searchController.searchBar;
Run Code Online (Sandbox Code Playgroud)

并在viewDidAppear:

-(void)viewDidAppear:(BOOL)animated {
  [self.searchController setActive:YES];
  [self.searchController.searchBar becomeFirstResponder];
  [super viewDidAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)

当我转向视图时,searchBar会动画,但不会出现键盘.

objective-c uisearchbar first-responder ios uisearchcontroller

44
推荐指数
10
解决办法
3万
查看次数

如何在UITableView中实现UISearchController - Swift

我是Swift的新手,我正在尝试为我UITableViewUIViewController类添加搜索功能.我google了很多,发现UISearchDisplayController已被弃用并被UISearchController取代.当我试图搜索教程时,我没有找到任何特别的UITableView.其中一些是为了实施UITableViewController.所以这是我的问题:

  1. 我们可以实现UISearchControllerUITableView是在一个UIViewController班?(我想我们可以)

  2. 如果可以,请转换用Objective-C编写的这些代码行.或者,如果有一些非常好的教程,请告诉我.

    @property (strong, nonatomic) UISearchController *searchController;
    
    UITableViewController *searchResultsController = [[UITableViewController alloc] init];
    
    // Init UISearchController with the search results controller
     self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
    
    // Link the search controller
    self.searchController.searchResultsUpdater = self;
    
    Run Code Online (Sandbox Code Playgroud)

资源

编辑: 我正在尝试将搜索结果更新程序分配为as

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating {

    override func viewDidLoad() {

       super.viewDidLoad()
       self.view.backgroundColor = UIColor.blackColor() 
       self.addTableViewWithSection() 
       self.searchResultsController = UITableViewController()           
       var controller = UISearchController(searchResultsController: nil)            
       controller.searchResultsUpdater = …
Run Code Online (Sandbox Code Playgroud)

uitableview uisearchbar ios swift uisearchcontroller

42
推荐指数
2
解决办法
5万
查看次数

在iOS 8中更改UISearchBar取消按钮文本

我想在iOS 8中的UISearchBar中的"取消"按钮的"取消"中更改文本.我正在使用UISearchController.我尝试过iOS 6和iOS 7的不同方法,但它们不起作用.有人这样做过吗?

uisearchbar ios ios8 uisearchcontroller

37
推荐指数
9
解决办法
3万
查看次数

使用UISearchController时,iOS 13 UIBarButtonItem不可单击且UINavigationBars重叠

我有一个导航栏,其中包含一些UIBarButtonItem按钮和类似的UISearchBar挂钩

var searchController: UISearchController!

override func viewDidLoad() {
    super.viewDidLoad()

    title = "Test"

    tableView.delegate = self
    tableView.dataSource = self

    searchController = UISearchController(searchResultsController: nil)
    navigationItem.searchController = searchController

    // This leads to the bug
    searchController.hidesNavigationBarDuringPresentation = false

    navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(leftTapped))
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(rightTapped))
}
Run Code Online (Sandbox Code Playgroud)

场景:我点击搜索栏,然后点击取消。

  • 问题1:除非我触摸屏幕的最外面的像素,否则条形按钮对触摸没有反应(仅在模拟器和鼠标单击时才可能)。

  • 问题2:当我按下另一个视图控制器时,导航项重叠

在此处输入图片说明

当我使用hidesNavigationBarDuringPresentation = true它时,它的工作就像预期的那样。


该问题出现在使用Xcode 11.0和11.1的带槽口和非带槽口的iPhone iOS 13.0和13.1上。

这是整个测试项目:https : //github.com/fl034/HidesNavigationBarDuringPresentationTest


我已经提起雷达(您也应该提起诉讼),但是也许你们中的有些人已经找到了解决方法?


更新1:iOS …

uinavigationcontroller ios uisearchcontroller ios13

36
推荐指数
2
解决办法
1504
查看次数