【问题标题】:Swift iOS : Find parse users via UISearchBar and dysplay results in a table viewSwift iOS:通过 UISearchBar 查找解析用户并在表格视图中显示结果
【发布时间】:2014-09-03 13:09:51
【问题描述】:

我尝试通过 UISearchBar 查找解析用户并在表格视图中显示结果。 当我热搜时,什么也没发生... 我的想法是使用 searchText.text 作为对 PFUser 的查询。

我应该尝试将 searchBar 与搜索显示控制器一起使用吗? 有什么想法吗?

import UIKit


  class AllFriendsTableViewController: UITableViewController, UISearchBarDelegate,      UISearchDisplayDelegate {
@IBOutlet var SearchDisplay: UISearchDisplayController!



var userList:NSMutableArray = NSMutableArray()


 func searchBarShouldBeginEditing(searchBar: UISearchBar!) -> Bool {
    return true
}

func searchBarShouldEndEditing(searchBar: UISearchBar!) -> Bool {
    return true

}

func searchBar(searchBar: UISearchBar!, textDidChange searchText: String!) {
    loadUser()
}



@IBOutlet var searchText: UISearchBar!



func loadUser () {

    userList.removeAllObjects()
    var findUser:PFQuery = PFUser.query()
    findUser.whereKey("username", equalTo: searchText.text)


    findUser.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in
        if !(error != nil) {
            // The find succeeded.
            println("succesfull load Users")
            // Do something with the found objects
            for object  in objects  {
                self.userList.addObject(object)
                println("users added to userlist")
            }
            self.tableView.reloadData()
        } else {
            // Log details of the failure
            println("error loadind user ")
            println("error")
        }

    }
}


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

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    if tableView == searchDisplayController.searchResultsTableView {
        return userList.count
    }
    else {
        return 0
    }
}



override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {



    let cell: AllFirendsTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)as AllFirendsTableViewCell


    let users:PFObject = self.userList.objectAtIndex(indexPath!.row) as PFObject


    var findUserName:PFQuery = PFUser.query()
    findUserName.whereKey("username", containsString: searchText.text)



    findUserName.findObjectsInBackgroundWithBlock{
        (objects:[AnyObject]!, error:NSError!) -> Void in

        if !(error != nil) {

            if let user:PFUser = users as? PFUser {
                cell.userNameTextField.text = user.username
                println("user exist")
                // define avatar poster

                if let avatarImage:PFFile = user["profileImage"] as? PFFile {
                    avatarImage.getDataInBackgroundWithBlock{(imageData:NSData!, error:NSError!)-> Void in

                        if !(error != nil) {

                            let image:UIImage = UIImage(data: imageData)


                            cell.avatarImage.image = image as UIImage
                            cell.avatarImage.layer.cornerRadius = 24
                            cell.avatarImage.clipsToBounds = true

                        }

                    }

                }
                else {
                    cell.avatarImage.image = UIImage(named: "Avatar-1")
                    cell.avatarImage.layer.cornerRadius = 24
                    cell.avatarImage.clipsToBounds = true
                }
            }

        }


    }

  return cell

}



override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    navigationController.navigationBar.hidden = false
    loadUser()

}


override func viewDidAppear(animated: Bool) {

}

override func viewDidLoad() {


    // Do any additional setup after loading the view, typically from a nib.
}

}

【问题讨论】:

  • 您应该在点击搜索按钮时搜索用户,但目前您在 cellForRow 方法中执行此操作。这是错误的。 raywenderlich.com 上有一篇关于搜索栏的文章,请阅读。
  • 谢谢,但我已经阅读了这篇教程。如果我像 raywenderlich.com 那样做,我必须下载所有解析用户,然后过滤结果。我宁愿只下载与 searchText.text 匹配的用户。
  • 对不起,我错了。我检查了你的代码,看起来没问题。
  • 好的,但我在表格视图中看不到任何结果。出了点问题。

标签: ios swift parse-platform uisearchbar


【解决方案1】:

我怀疑这可能是由于您尝试从发生网络请求的后台线程重新加载表格视图。 UI 更新应该从主线程进行。

在您的 loadUser() 函数中,尝试从主线程重新加载您的 tableview,如下所示:

NSOperationQueue.mainQueue().addOperationWithBlock({
    self.tableView.reloadData()
})

这可能会解决您的问题。

【讨论】:

  • 那些 withBlock: 来自 parse 的方法在主线程上运行块。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多