【问题标题】:Compare values and show specific result in uitableview比较值并在 uitableview 中显示特定结果
【发布时间】:2016-04-19 19:48:00
【问题描述】:

我正在尝试将搜索过滤器添加到我的UITableView,当用户单击它时,我在导航栏“搜索”上有一个按钮,它会打开一个 xib 控制器,用户可以在完成后填写字段UITableView 应该只显示用户输入的比较结果。我已将 xib 中的所有值传递给 tableviewcontroller,但如何比较它们并显示具体结果?

var pj = [PostedJobs]()
var pjJobs = PostedJobs()

class FeaturedTableViewController: UITableViewController {

    @IBAction func btnSearch(sender: UIBarButtonItem) {

        let detailViewController:SearchViewController = SearchViewController(nibName: "SearchViewController", bundle: nil)

        self.presentPopupViewController(detailViewController, animationType: MJPopupViewAnimationFade)
        // detailViewController.detailViewController1 = self

    }
    @IBOutlet var myTableView: UITableView!
    @IBOutlet weak var menuButton: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()

        println(sf.price)
        println(sf.deliveryTime)
        println(sf.distance)
        println(sf.featuredFilter)
        println(sf.location)
        println(sf.size)

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "dismiss:", name:"dismiss", object: nil)

        if self.revealViewController() != nil {
            menuButton.target = self.revealViewController()
            menuButton.action = "revealToggle:"

            self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
        }

        var urlString = "http://ziprelay.com/api/public/index.php/api/allJobs?token=\(user.token)"
        let loadingNotification = MBProgressHUD.showHUDAddedTo(self.view, animated: true)
        loadingNotification.mode = MBProgressHUDMode.Indeterminate
        loadingNotification.labelText = "Loading"

        let alert = UIAlertView()
        alert.title = "Alert"
        alert.addButtonWithTitle("okay")

        request(.POST, urlString)
            .responseJSON { request, response, data, error in

                println(user.token)
                println(data)
                println(response)
                println(request)

                MBProgressHUD.hideAllHUDsForView(self.view, animated: true)

                if (error != nil) {
                    alert.message = String(stringInterpolationSegment: error?.localizedDescription)
                    alert.show()

                } else {
                    pj = [PostedJobs]()
                    for var i = 0; i < JSON(data!)["jobs"].count; i++ {
                        println(JSON(data!)["jobs"][0]["job_info"]["job_id"])
                        pj.append(PostedJobs.jobsPosted(data!,index: i))
                    }

                    println(pj.count)

                    self.myTableView.reloadData()
                    self.do_table_refresh()
                }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Potentially incomplete method implementation.
        // Return the number of sections.
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete method implementation.
        // Return the number of rows in the section.
        return pj.count
    }

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

        var string:String = String()

        println(pj[indexPath.row].featured)

        if (pj[indexPath.row].featured == "null") {
            string = "reuseIdentifier"
        } else if (pj[indexPath.row].featured == "yes") {
            string = "reuseIdentifier1"
        }

        let cell = tableView.dequeueReusableCellWithIdentifier(string, forIndexPath: indexPath) as! FeaturedTableViewCell

        cell.lblHeading.text = pj[indexPath.row].parcel_type
        cell.lblFrom.text = pj[indexPath.row].from_zip
        cell.lblTo.text = pj[indexPath.row].to_zip
        // cell.lblSize.text = pj[indexPath.row].parcel_type
        cell.lblClientName.text = pj[indexPath.row].name
        var convertValue = String(stringInterpolationSegment: pj[indexPath.row].order_amount).floatValue

        cell.lblCost.text = "\(convertValue)"

        if(pj[indexPath.row].file_path != "")
        {
            ImageLoader.sharedLoader.imageForUrl("\(pj[indexPath.row].file_path)", completionHandler:{(image: UIImage?, url: String) in

                cell.imgProduct.image = image
            })
        }

        println(pj[indexPath.row].parcel_type)
        println(pj[indexPath.row].from_zip)
        println(pj[indexPath.row].to_zip)
        println(pj[indexPath.row].parcel_type)
        println(pj[indexPath.row].name)
        println(String(stringInterpolationSegment: pj[indexPath.row].order_amount))

        let favStar = UIImage(named: "favourites_star.png")

        switch pj[indexPath.row].rating {
        case 0:
            println("aeman")
        case 1:
            cell.star1.image = favStar
        case 2:
            cell.star1.image = favStar
            cell.star2.image = favStar
        case 3:
            cell.star1.image = favStar
            cell.star2.image = favStar
            cell.star3.image = favStar
        case 4:
            cell.star1.image = favStar
            cell.star2.image = favStar
            cell.star3.image = favStar
            cell.star4.image = favStar
        case 5:
            cell.star1.image = favStar
            cell.star2.image = favStar
            cell.star3.image = favStar
            cell.star4.image = favStar
            cell.star5.image = favStar
        default:
            println("aeman")
        }

        return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 75
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let indexPathh = tableView.indexPathForSelectedRow()
        let currentCell = tableView.cellForRowAtIndexPath(indexPathh!) as UITableViewCell?;
        pjJobs.pathToPostedJobs = indexPathh!.row
        println(pjJobs.pathToPostedJobs)

        performSegueWithIdentifier("map", sender: self)
    }

    func do_table_refresh()
    {
        dispatch_async(dispatch_get_main_queue(), {
            self.myTableView.reloadData()
            return
        })
    }

    func dismiss(notification: NSNotification) {
        self.dismissPopupViewControllerWithanimationType(MJPopupViewAnimationFade)
    }
}

这是我的第一个应用程序,很抱歉代码混乱,有人可以帮忙吗?

【问题讨论】:

  • 能否贴出将过滤器数据传回 UITableViewController 的代码?

标签: ios swift uitableview search filter


【解决方案1】:

您需要使用传递给UIViewController 的过滤数据来过滤您的原始数组。

//as in your code pj is the full array
// definde a new array to be the dataSource
var dataSource:[PostedJobs]!

假设您有一个方法,当用户完成过滤并返回表时将调用该方法,称为filterDate

func filterData() {
    let price = // the filtered price
    let loacation = // the filtered location
    let distance = // the filtered one
    let size = // the filtered one
    let time = // the filtered one
    let isFeatured = // the filtered one

   dataSource = jp.filter {
   $0.price == price && $0.location == location && $0.distance == distance &&  $0.size == size && $0.time.compare(time) == NSComparisonResult.OrderedSame && $0.isFeatured == isFeatured
  }
  // reload table 
  tableView.relaodData()

您将在所有UITableViewDataSourceDelegate 方法中使用dataSource 而不是pj

【讨论】:

  • 谢谢伊斯梅尔,我想通了。 :)
【解决方案2】:

不要使用pj 作为表格视图的来源。使用其他数组,当用户点击“完成”按钮时,循环遍历pj 数组并仅将应该在表视图中的内容添加到第二个数组。然后将其用作表格视图的来源。

【讨论】:

  • 感谢您的解决方案,但是我通过将值发送到服务器并通过 web 服务调用新数据并重新加载 tableview 以某种方式修复了它。顺便谢谢你的回复。 :)
猜你喜欢
  • 2015-06-19
  • 2017-11-16
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
相关资源
最近更新 更多