标签: uisearchcontroller

无法将 UISearchController 添加到 UIViewController

我正在尝试将 a 添加UISearchController到以编程方式创建UITableViewUIViewController类中。这是我的代码:

var resultSearchController = UISearchController()

var myTableView = UITableView()

override func viewDidLoad() {
    super.viewDidLoad()

    myTableView.frame = CGRectMake(0, 0, view.bounds.width, view.bounds.height)
    myTableView.delegate = self
    myTableView.dataSource = self

    myTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

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

        self.myTableView.tableHeaderView = controller.searchBar

        return controller
    })()

    UIApplication.sharedApplication().keyWindow?.addSubview(myTableView)

}
Run Code Online (Sandbox Code Playgroud)

我得到的两个错误是

 - Cannot assign a value of type 'ViewController' to a value of type 'UISearchBarDelegate? …
Run Code Online (Sandbox Code Playgroud)

uitableview uiviewcontroller ios swift uisearchcontroller

3
推荐指数
1
解决办法
2687
查看次数

按对象数组过滤searchController

我已经创建了一个searchController,因此我试图使其根据UISearchController中的文本过滤内容。我创建了一个自定义对象,如下所示。我试过使用NSPredicate,但一直得到:

cannot convert value of type NSPredicate to expected type @noescape (organization) throws...

class Organization: Object {
    var id: Int = 0
    var name: String = ""
    var shortName: String = ""
    var image: NSData = NSData()
    var pinImage: NSData = NSData()
    let locations = List<Location>()

}
Run Code Online (Sandbox Code Playgroud)

然后,我sortedLocations在ViewController中调用了一个数组,其中包含许多Organization对象。

到目前为止,我已经尝试过:

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredTableData.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF.name CONTAINS[c] %@", searchController.searchBar.text!)

    let array = sortedLocations.filter(searchPredicate)
    filteredTableData = array as! [Organization]



    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

3
推荐指数
1
解决办法
557
查看次数

如何默认隐藏UISearchController()?

我将UISearchController()添加到我的UIViewController中,如下所示:

class SearchViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating  { 

let tableData = ["Here's", "to", "the", "crazy"]
var filteredTableData = [String]()
var resultSearchController = UISearchController()

@IBOutlet var tableView: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()

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

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    // Reload the table
    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

... TableView功能......

func updateSearchResultsForSearchController(searchController: UISearchController)
    {
        filteredTableData.removeAll(keepCapacity: false)

        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

3
推荐指数
1
解决办法
2156
查看次数

搜索结果中的Swift搜索结果控制器转到另一个视图控制器

问题:

我有一个表视图,用户可以滚动查找内容或使用搜索栏.搜索栏不是使用StoryBoard创建的.我的视图有一个UISearchController处理搜索栏和搜索结果更新.我遇到的问题是,由于我SearchResultsController是由另一个控制器实例化的,我不能执行另一个视图的segue,或者至少我找不到解决方案.除了我的搜索结果控制器和它注定的视图之间的segue之外,一切都有效.

我想做什么

有我的MyNavTableViewController代表MySearchResultsController.在搜索结果控制器中,当用户点击a时,它将转到另一个视图TableViewCell.我没有使用StoryBoard来实现这一点我很难使用segues转换到另一个视图.

如果我不能让这个工作,我可能会做:

我必须在视图之间传递信息,对我来说,我总是使用segues来完成它.但是,如果这不起作用,我可能会尝试通过将其推送到导航控制器堆栈并将数据写入共享数据库或其他内容来模态地呈现视图.我宁愿使用segue.

研究: 肯定不止于此,但我不会在网址上占用太多空间.

以编程方式创建segue

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html

我的设置

我将尝试尽可能简洁.代码比我正在显示的代码多.我只是想尝试清理它,以便我只展示重要的东西.我也在改变一些名字,因为可能有敏感的信息.这可能不是什么大问题,但我宁愿保持安全.

class MyNavTableViewController: UIViewController, UITableViewDataSource{

    //this is 
    @IBOutlet weak var tableView: UITableView!
    var searchController: UISearchController!


    override func viewDidLoad(){
      ...code 

         tableView.registerClass(UITableViewCell.self,forCellReuseIdentifier: tblId)

    let resultsController = MySearchResultsController()
    resultsController.databaseFilePath = databaseFilePath()
    //this is essential that I use a segue because between my views I'm passing information between them.
    resultsController.photo = photo!

    searchController = UISearchController(searchResultsController:       resultsController)
    let searchBar = searchController.searchBar
    searchBar.placeholder = searchBarPlaceHolderText …
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller swift2

3
推荐指数
1
解决办法
4191
查看次数

无法将“NSNull”类型的值转换为“NSString”

我有一个非常奇怪的问题,我无法弄清楚这里出了什么问题。

这是我的代码

func updateSearchResultsForSearchController(searchController: UISearchController) {
    filterTableData.removeAll(keepCapacity: false)
    let searchWord = searchController.searchBar.text!

    getCountriesNamesFromServer(searchWord)

    let searchPredict = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)

     newTableData = [String]()

    for var i = 0; i < self.dict.count - 1; i++ {

        let cityName = (((self.dict["\(i)"] as?NSDictionary)!["City"] as?NSDictionary)!["name"] as?NSString)! as String
       let countryName = (((self.dict["\(i)"] as?NSDictionary)!["Country"] as?NSDictionary)!["name"] as?NSString)! as String

            print("countryName is \(countryName)")





    newTableData.append(cityName)
    }
    print("newTableData is \(newTableData)" )
    let array = (newTableData as NSArray).filteredArrayUsingPredicate(searchPredict)
    print("array is\(array)")
    filterTableData = array as! [String]
    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

程序在这一行崩溃

let …
Run Code Online (Sandbox Code Playgroud)

ios uisearchresultscontroller swift uisearchcontroller

3
推荐指数
1
解决办法
7723
查看次数

带有加载指示符的UISearchController

我实现了UISearchController,我从js回调中获取数据但是当我在磁带中使用searchbar它需要一些时间来放置数据,所以我想知道如何实现加载indicator到表视图中的结果UISearchController

loading objective-c ios uisearchcontroller

3
推荐指数
1
解决办法
1974
查看次数

UISearchBar 在 iOS 11 中的错误位置

将我们的代码应用于 iOS 11,我正在努力解决 UINavigationController 中定位的 UISearchbar。我像这样设置 SearchController/SearchBar:

self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchBar.scopeButtonTitles = @[@"foo", @"bar"];
self.searchController.searchBar.showsScopeBar = YES;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.definesPresentationContext = YES;
if (@available(iOS 11.0, *))
{
    self.navigationItem.searchController = self.searchController;
    self.navigationItem.hidesSearchBarWhenScrolling = YES;
    UISearchBar *searchbar = self.searchController.searchBar;
    [searchbar setSomeColors];
}
Run Code Online (Sandbox Code Playgroud)

当使用我们的默认颜色时,事情可能看起来不错,但 SearchBar 和 ScopeButtons 之间的空间可能有点太大: 默认布局 更改搜索栏的 backgroundColor 揭示出了什么问题: 不同的颜色揭示了问题

因此,UISearchBar 在其父视图中的位置有点太高了。有谁知道,是什么导致了 iOS 11 中的这种行为?

uisearchbar ios uisearchcontroller ios11 xcode9

3
推荐指数
1
解决办法
1458
查看次数

如何在 iOS 11 上删除 UISearchController 下的行?

如何删除UISearchControlleriOS 11下的行?

我添加了UISearchController使用此代码:

navigationItem.searchController = searchController
Run Code Online (Sandbox Code Playgroud)

但这样做之后,它下面有一条奇怪的线:

在此处输入图片说明

任何关于如何去除线条或至少选择其颜色的建议将不胜感激。

uinavigationitem swift uisearchcontroller ios11

3
推荐指数
1
解决办法
1074
查看次数

如何在searchcontroller中更改uitextfield颜色?

在此处输入图片说明

我已经在导航栏中嵌入了SearchController。如何更改UITextField的颜色将搜索字符串保留为White的颜色?

uinavigationcontroller ios swift uisearchcontroller ios11

3
推荐指数
1
解决办法
712
查看次数

iOS 11 UISearchController在输入时消失

iOS 11搜索栏在输入时一直在消失我试图设置searchController.hidesNavigationBarDuringPresentation = false也是searchController.definesPresentationContext = true这里是一个正在发生的事情的视频

视频

我的代表职能

func updateSearchResults(for searchController: UISearchController) {
    filarr = arr.filter({ (arr:String) -> Bool in
        if arr.contains(searchController.searchBar.text!){
            return true
        }else{
            return false
        }

    })
    resultController.tableView.reloadData()
}

//Assigning the searchbarcontroller
if #available(iOS 11.0, *) {
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationItem.searchController = searchController
        self.navigationItem.hidesSearchBarWhenScrolling = false
    } else {
        tableView.tableHeaderView = searchController.searchBar
    }
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

3
推荐指数
1
解决办法
510
查看次数