gpt4 book ai didi

swift - 有条件地激活 iOS8+ 的 UISearchController

转载 作者:行者123 更新时间:2023-11-30 13:44:18 34 4
gpt4 key购买 nike

我有一个应用程序想要定位到 iOS 7,但目前无法这样做,因为它包含仅适用于 iOS 8 及更高版本的 UISearchController。

我一直在尝试使用 UISearchDisplayController 修改搜索栏,以便它在 iOS 7 中工作,但我就是无法让它工作,并且感到有点沮丧。因此,作为一项临时措施(虽然我在编码方面做得更好),我想禁用任何低于 8.0 的 iOS 的搜索栏 - 这不会对最终用户产生太大影响,因为它只是一个更大的应用程序中的一个屏幕。

问题是我无法弄清楚如何有条件地执行此操作(例如,使用“if#available(iOS 8.0, *)”),因为变量“searchController”和“controller”是在外部定义的方法或函数的,因此不能有条件地分配。我猜条件语句只能在函数和方法中使用? (如您所见,仍在学习中)。

那么有人可以提供一种方法让我有条件地禁用此处的搜索栏,以便我可以定位 iOS 7 吗?我的此类代码如下。谢谢!

class RegData2: UITableViewController, UISearchResultsUpdating {

let model = Model()
var prevArray = [String]()
var selectionPrev = String()

var filteredTableData = [String]()

var searchController = UISearchController()
let controller = UISearchController(searchResultsController: nil)


override func viewDidLoad() {
super.viewDidLoad()


self.searchController = ({
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()

self.tableView.tableHeaderView = controller.searchBar
self.definesPresentationContext = true

return controller

})()

// Reload the table
self.tableView.reloadData()

}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if (self.searchController.active) && (controller.searchBar.text != "") {
return self.filteredTableData.count
}
else {
return prevArray.count
}
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
cell.textLabel?.font = UIFont.boldSystemFontOfSize(18)


if (self.searchController.active) && (controller.searchBar.text != "") {
cell.textLabel?.text = filteredTableData[indexPath.row]


return cell
}
else {

cell.textLabel?.text = prevArray[indexPath.row]

return cell
}
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
controller.searchBar.resignFirstResponder()
performSegueWithIdentifier("regData2ToRegView", sender: self)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "regData2ToRegView" {

let regView = segue.destinationViewController as! RegView
let indexPath : NSIndexPath = self.tableView.indexPathForSelectedRow!
var selection : String = prevArray[indexPath.row]
if (self.searchController.active) && (self.controller.searchBar.text != "") {
selection = self.filteredTableData[indexPath.row]
}
else {
selection = self.prevArray[indexPath.row]
}

regView.prevSelection = selection
regView.prevSelectionType = selectionPrev


}

}

func updateSearchResultsForSearchController(searchController: UISearchController)
{


if searchController.searchBar.text != ""{

filteredTableData.removeAll(keepCapacity: true)

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

if self.selectionPrev != "ed" {
let array = (self.prevArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
// edAlert = 0
} else {
let array = (self.prevArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
// edAlert = 1
}

self.tableView.reloadData()

} else {

self.tableView.reloadData()
}

}

}

最佳答案

要检查版本,您可以执行以下操作:

switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
case .OrderedSame, .OrderedDescending:
println("iOS >= 8.0")
case .OrderedAscending:
println("iOS < 8.0")
}

但很可能您只需要检查该类是否可用,然后实例化它:

if NSClassFromString("UISearchController") != nil { 
// init and use ...
}

这称为“弱链接”类。

编辑:
您还可以使用预处理器在编译前包含/排除任何代码,即:

#if __IPHONE_8_0
class RegData2: UITableViewController, UISearchResultsUpdating {
#else
class RegData2: UITableViewController {
#endif

更多信息herehere还有here .

关于swift - 有条件地激活 iOS8+ 的 UISearchController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161612/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com