带有 UISearchController 的 resultController 中的空白结果
Posted
技术标签:
【中文标题】带有 UISearchController 的 resultController 中的空白结果【英文标题】:blank result in resultController with UISearchController 【发布时间】:2016-06-24 14:40:18 【问题描述】:我使用 2 个带有自定义原型的 tableViewController(一个用于搜索,一个用于结果)
我在控制台(打印...)中得到了很好的结果,但是我的自定义单元格是空白的
如果有人可以提供帮助,这是我的代码
泰
import UIKit
class search_TableViewController: UITableViewController, UISearchResultsUpdating
@IBOutlet var sTableView: UITableView!
// Properties
// 1
var users:[[String:AnyObject]]!
var foundUsers:[[String:AnyObject]]!
// 2
var userDetails:[String:AnyObject]!
// 3
var resultController: UITableViewController!
var searchController: UISearchController!
override func viewDidLoad()
super.viewDidLoad()
users = []
foundUsers = []
self.sTableView.dataSource = self
self.sTableView.delegate = self
self.automaticallyAdjustsScrollViewInsets = false
//ViewDidLoad
let storyboard = UIStoryboard(name: "Main", bundle: nil)
resultController = storyboard.instantiateViewControllerWithIdentifier("resultId") as! UITableViewController
resultController.tableView.delegate = self;
resultController.tableView.dataSource = self
resultController.tableView.delegate = self;
resultController.tableView.registerClass(result_TableViewCell.self, forCellReuseIdentifier: "resultPRTC")
// 3
searchController = UISearchController(searchResultsController: resultController)
searchController.hidesNavigationBarDuringPresentation = true
searchController.searchBar.searchBarStyle = .Minimal
searchController.searchResultsUpdater = self
self.sTableView.tableHeaderView = searchController.searchBar
// 4
self.definesPresentationContext = true
// 5
let session = NSURLSession.sharedSession()
let url:NSURL! = NSURL(string: "http://jsonplaceholder.typicode.com/users")
let task = session.downloadTaskWithURL(url) (location: NSURL?, response: NSURLResponse?, error: NSError?) -> Void in
if (location != nil)
let data:NSData! = NSData(contentsOfURL: location!)
do
self.users = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves) as! [[String : AnyObject]]
dispatch_async(dispatch_get_main_queue(), () -> Void in
self.sTableView.reloadData()
)
catch
// Catch any exception
print("Something went wrong")
else
// Error
print("An error occurred \(error)")
// Start the download task
task.resume()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
//MARK: UISearchResultsUpdating
func updateSearchResultsForSearchController(searchController: UISearchController)
foundUsers.removeAll()
for user in users
let userName:String! = user["name"] as? String
if userName.localizedCaseInsensitiveContainsString(searchController.searchBar.text!)
foundUsers.append(user)
print ("Liste 1 : \(foundUsers)")
self.resultController.tableView.reloadData()
//MARK: UITableViewDataSource
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
//print (tableView)
if tableView == self.sTableView
print ("userSearch :\(users.count)")
return users.count
//passe sur la recherche
print ("userResult:\(foundUsers.count)")
return foundUsers.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
var cellIdentifier: String!
var dic: [String:AnyObject]!
if tableView == self.sTableView
cellIdentifier = "searchPRTC"
dic = self.users[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! search_TableViewCell
cell.sNom?.text = dic["name"] as? String
cell.sEmail?.text = dic["email"] as? String
return cell
else
cellIdentifier = "resultPRTC"
dic = self.foundUsers[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! result_TableViewCell
cell.rNom?.text = dic["name"] as? String
print ("Liste 2 : \(foundUsers)")
return cell
// let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)
//cell.textLabel?.text = dic["name"] as? String
// cell.adresse?.text = dic["username"] as? String
如果我使用此代码而不是我的自定义原型作为结果,我会看到结果 - 也许这些信息会有很大帮助:
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)
cell.textLabel?.text = dic["name"] as? String
【问题讨论】:
【参考方案1】:我有它: 必须删除这个!
resultController.tableView.registerClass(result_TableViewCell.self, forCellReuseIdentifier: "resultPRTC")
有人知道是否可以只有一个视图吗?或者我必须有 2 个 tableview 控制器(一个用于搜索,一个用于结果)
ty
【讨论】:
以上是关于带有 UISearchController 的 resultController 中的空白结果的主要内容,如果未能解决你的问题,请参考以下文章
带有 UISearchController 的 resultController 中的空白结果
UISearchController 位置错误,因为带有 tableview 插图
带有大标题的 UISearchController,UI 在关闭时行为不端
带有 UISearchController 的 UITableView 在进入结果视图并返回时进入导航栏
使用另一个视图控制器(带有表格视图)来显示 UISearchController 的结果
带有大标题的 UISearchController 在选项卡栏中崩溃,“只有一个带有顶部边界的调色板可以在过渡之外处于活动状态”