标签: uisearchcontroller

选择searchBar时,在UISearchController中预加载数据

在我的应用程序中,我使用UISearchController(iOS 8中的新增功能)来显示搜索结果.有没有办法显示一组默认结果,当用户点击searchBar而不输入任何内容时会显示这些结果?
我找到了一些关于这个主题的问题和答案,但他们都使用旧的UISearchDisplayController,我似乎无法使用UISearchController解决方案.

谢谢

objective-c ios ios8 uisearchcontroller

6
推荐指数
1
解决办法
305
查看次数

UITearchBar UITableViewHeader的子视图?

我想将UISearchBar添加到已经具有标题视图的UITableView.当我尝试将搜索栏添加到现有的标题视图时,它一直有效,直到我点击它,此时我得到The view hierarchy is not prepared for the constraint,这似乎是因为搜索栏不是tableview的直接子视图,所以当UISearchController尝试更新时它不能的约束.

我找到的唯一方法是将表视图标题作为搜索栏,然后一切正常,但当然我丢失了标题视图中已有的其他视图.

uitableview uisearchbar ios uisearchcontroller

6
推荐指数
1
解决办法
1396
查看次数

iOS8 Swift UISearchController隐藏了导航栏

我实现了一个UITableViewController的搜索功能,如下所示:

    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()

        self.tableView.tableHeaderView = controller.searchBar
        return controller
    })()
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,如果我点击它,我的导航栏和我的navigationcontrollers标题就会消失.是否有解决方案来阻止这种行为(在swift中)?

没有点击:

没有点击

点击:

点击

header navigationbar swift ios8 uisearchcontroller

6
推荐指数
1
解决办法
2900
查看次数

UISearchController如何工作?

它怎么UISearchController做呢?

  • 它如何将其转换UISearchBar为类似导航栏的视图?
  • 它如何将其UISearchBar放入另一个视图层次结构并在以后恢复?
  • 它是如何使用UIViewController表示API 完成所有这些的?
  • 即使在所有呈现的视图控制器全屏的iPhone上,它如何仅覆盖呈现视图控制器的视图?

我可以在UISearchController不使用私有API 的情况下自行创建吗?

cocoa-touch uikit ios ios8 uisearchcontroller

6
推荐指数
1
解决办法
171
查看次数

带有SearchController的TableView - 未调用DEINIT

我在界面构建器中添加了一个搜索栏和搜索显示控制器到我的应用程序.我无法正确地进行deinit(dealloc).

它显示以下行为(swift2,ios9):

  • 用户不搜索任何内容,只需从tableView中选择一个项目,调用DEINIT即可
  • 用户搜索某些内容(或只搜索搜索栏中的内容),取消搜索,从tableView中选择项目,调用DEINIT
  • 用户搜索某些东西(或只是点击搜索栏),然后从tableView中选择一个项目,不调用DEINIT :(

如果我在导航控制器中选择"返回"而不是选择项目,则会出现相同的行为.

code removed - refer to COMPLETE CODE at bottom of post.
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏!

更新进一步测试表明,从视图控制器中删除progressHud/loadingHud完全没有影响DEINIT没有被调用.它必须与tableview或searchcontroller本身有关...

更新2我尝试在viewWillDissapear中调用searchBarCancelButtonClicked()方法,但仍然没有释放.即使你点击"取消"然后导航它就会......

更新3将willDisappear/didDisappear更改为以下对DEINIT没有影响 - 但不会给出错误的界面问题(感谢Polina).我试图找出我能发布的任何东西,但到目前为止还没有运气.

    override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(true)
    searchBarCancelButtonClicked(searchController.searchBar)
}

override func viewDidDisappear(animated: Bool) {
    print("View did disappear")
    searchController.searchBar.resignFirstResponder()
    searchController.searchBar.endEditing(true)
    searchController.active = false
    loadingHud.removeFromSuperview()
    progressHud.removeFromSuperview()
    searchController.searchBar.delegate = nil
    searchController.searchResultsUpdater = nil
    searchController = nil
    tableView = nil

    super.viewDidDisappear(true)

}
Run Code Online (Sandbox Code Playgroud)

更新4我找不到答案.真的希望有人可以帮忙!

更新5响应@ConfusedByCode - 我更新了以下方法,以便[unowned self] in在所有闭包或后台线程操作中使用:

code removed - …
Run Code Online (Sandbox Code Playgroud)

uitableview retain ios swift uisearchcontroller

6
推荐指数
2
解决办法
2023
查看次数

原因:' - [_ UIFullscreenPresentationController adaptivePresentationController]:

我已将搜索栏添加到我的tableview.But当我在我的表视图中搜索一些东西,如果我按下取消默认按钮搜索栏以解除我的键盘意味着我的应用程序崩溃.

崩溃报告:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIFullscreenPresentationController adaptivePresentationController]: unrecognized selector sent to instance 0x7ff10a88cd80'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010b18ed85 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010ca8adeb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010b197d3d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010b0ddcfa ___forwarding___ + 970
    4   CoreFoundation                      0x000000010b0dd8a8 _CF_forwarding_prep_0 + 120
    5   UIKit                               0x000000010dfda4c2 -[UISearchController _searchPresentationController] + 134
    6   UIKit                               0x000000010db8ad77 -[_UISearchControllerTransplantSearchBarAnimator animateTransition:] + 215
    7   UIKit                               0x000000010d6f148f __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 2638
    8   UIKit                               0x000000010d58ef62 …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

6
推荐指数
1
解决办法
1934
查看次数

如何搜索键盘中的搜索按钮?

我的tableview标题中有一个搜索栏.为此,我正在使用uisearchcontroler.但是当我在搜索栏中发短信时它会更新tablview数据,我需要在点击键盘上的搜索按钮时更新tablview,因为我在api中获取搜索数据,每次当我在搜索栏中发短信时它都会请求并且需要很长时间.我怎么解决这个问题?

var resultSearchController = UISearchController()
var indicator:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
var ref=UIRefreshControl()
override func viewDidLoad() {
    super.viewDidLoad()


    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    indicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    indicator.center = view.center
    view.addSubview(indicator)
    indicator.bringSubviewToFront(view)

    indicator.startAnimating()
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true

    getRequests.getType1(tableView,spinner: indicator)

    ref.addTarget(self, action: #selector(Catalog1TableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    ref.attributedTitle = NSAttributedString(string: "????????")
    tableView.addSubview(ref)

}


func updateSearchResultsForSearchController(searchController: UISearchController)
{
    indicator.startAnimating()
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    tableView.reloadData()
    getRequests.getProduct(tableView, spinner: indicator,name: searchController.searchBar.text!)
    for …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

6
推荐指数
1
解决办法
3312
查看次数

在iOS11中的tableHeaderView中使用UISearchController和UISearchBar

有没有人成功地保留了UISearchBartableHeaderView一个UITableView在ios11?iPhone X在景观中通常会出现问题:

在此输入图像描述

Apple建议使用新searchController属性:

if (@available(iOS 11.0, *)) {
    self.navigationItem.searchController = self.searchController;
    self.navigationItem.hidesSearchBarWhenScrolling = NO;
} else {
    self.tableView.tableHeaderView = self.searchController.searchBar;
}
Run Code Online (Sandbox Code Playgroud)

然而,这并不总是有效.这是一个代码示例:

嵌入UISplitViewController时,UINavigationBar中缺少iOS11 UISearchBar

所以,试图保持searchBartableHeaderView-切实可行的第一步是应用适当的自动布局限制:

if (@available(iOS 11.0, *)) {
    UILayoutGuide *guide = self.tableView.safeAreaLayoutGuide;
    searchBar.translatesAutoresizingMaskIntoConstraints = NO;
    [searchBar.leftAnchor constraintEqualToAnchor:guide.leftAnchor].active = YES;
    [searchBar.rightAnchor constraintEqualToAnchor:guide.rightAnchor].active = YES;
}
Run Code Online (Sandbox Code Playgroud)

searchBar显示时,那么正确的尺寸:

在此输入图像描述

但是,UISearchBar激活时会出现问题:

在此输入图像描述

这似乎是一个老问题.有许多stackoverflow问题和答案与这样的问题有关.在这种情况下,在检查视图层次结构时,似乎设置的宽度UISearchBar不正确.所以这可以纠正:

- (void)didPresentSearchController:(UISearchController *)searchController NS_AVAILABLE_IOS(11_0)
{
    if (@available(iOS 11.0, *)) {
        CGRect frame = …
Run Code Online (Sandbox Code Playgroud)

uitableview uisearchbar ios uisearchcontroller ios11

6
推荐指数
0
解决办法
1729
查看次数

Swift - 覆盖tableview函数 - Method不会覆盖其超类中的任何方法

我想实现UISearchController,使用本教程一步一步:

使用MKLocalSearchRequest搜索地点并使用UISearchController显示结果

在本节中......

使用MKLocalSearchRequest搜索位置

...我在步骤3中遇到问题.设置表视图数据源

extension LocationSearchTable {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return matchingItems.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell")!
    let selectedItem = matchingItems[indexPath.row].placemark
    cell.textLabel?.text = selectedItem.name
    cell.detailTextLabel?.text = ""
    return cell
  }
}
Run Code Online (Sandbox Code Playgroud)

错误:方法不会覆盖其超类中的任何方法

我正在尝试overridecellForRowAtindexPathtableView函数中删除,在这种情况下我在Xcode中没有错误,但执行后出错:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'UITableView (<UITableView: 0x7ff8e03a3800; frame = (0 0; 375 667); clipsToBounds = YES; autoresize = W+H;
gestureRecognizers = <NSArray: …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mklocalsearchrequest swift uisearchcontroller

6
推荐指数
1
解决办法
3940
查看次数

Swift 5和iOS 13 UISearchController错误的呈现和消除行为

当我将项目更新到iOS 13时,我遇到了异常问题。我有显示和处理某些UISearchController动作的逻辑(下面的代码),所有部分在iOS 11和12中均正常运行。

我的任务是在导航栏中添加搜索按钮,以UISearchController在按钮操作后显示。

但是在iOS 13中,我遇到了2个问题:

从按钮动作调用的代码

func showSearch() {
        let searchResultsController = LUSearchResultsViewController()...
        let searchController = UISearchController(searchResultsController: searchResultsController)
        searchController.delegate = self
        searchController.searchResultsUpdater = searchResultsController
        navigationItem.searchController = searchController
        definesPresentationContext = true
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            searchController.isActive = true
        }
}
Run Code Online (Sandbox Code Playgroud)

只有一种解决方案可以帮助我显示搜索控制器,而与以前的iOS版本没有任何区别。

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            searchController.isActive = true
}
Run Code Online (Sandbox Code Playgroud)

在iOS 13,iOS 11和12上运行的代码无需asyncAfter

帮助我隐藏UISearchController和设置iOS 11和12(而非13)中的导航栏初始状态的代码。在SearchBar上点击“ 取消 ” 后,UISearchController开始调用委托方法。

  //MARK: UISearchControllerDelegate


    public func willDismissSearchController(_ searchController: UISearchController) {
         self.navigationItem.searchController = …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller swift5 ios13

6
推荐指数
1
解决办法
718
查看次数