私はPFQueryTableViewController
映画をリストする を持っています。私のナビゲーション バーにはフィルター ボタンがあり、ユーザーがそれを押すとUIPopoverPresentationController
. このポップオーバーは、UITableView にいくつかのオプションを表示するだけです。以下の画像を参照してください。
ゴール
ユーザーがポップオーバーでオプションを選択すると、オプション インデックスがメインに返され、PFQueryTableViewController
それに応じてテーブルが更新される必要があります。また、ポップオーバー コントローラーも閉じます。
テーブルをソートする方法は既に知っています。選択したオプションを戻す方法と、それをif
ステートメントに追加して Parse クエリをフィルタリングする方法を知る必要があります。たとえば、ユーザーが最高評価でフィルタリングすることを選択した場合、私のqueryForTable()
関数では、次のようなものを配置します。
if XXXXXXXXXXXX {
query.orderByDescending("highestRated")
}
そして、私はすでにポップオーバー VC を作成しており、それは機能します。
うまくいけば、これは理にかなっています...そうでない場合は、詳細を尋ねてください。私の popover VC のコードは次のとおりです。
class SortByViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var sortByTableView: UITableView!
var sortByOptions = ["Date added", "Film name", "Our star rating", "Highest rated", "Lowest rated", "Director's name"]
override func viewDidLoad() {
super.viewDidLoad()
self.sortByTableView.rowHeight = 44.0
sortByTableView.tableFooterView = UIView(frame:CGRectZero)
sortByTableView.backgroundColor = UIColor.clearColor()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sortByOptions.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = sortByTableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel?.text = self.sortByOptions[indexPath.row]
let imageName = UIImage(named: sortByOptions[indexPath.row])
cell.imageView?.image = imageName
let itemSize:CGSize = CGSizeMake(30, 30)
UIGraphicsBeginImageContextWithOptions(itemSize, false, UIScreen.mainScreen().scale)
let imageRect : CGRect = CGRectMake(0, 0, itemSize.width, itemSize.height)
cell.imageView!.image?.drawInRect(imageRect)
cell.imageView!.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
cell.textLabel?.textColor = UIColor(hue: 359/360, saturation: 67/100, brightness: 71/100, alpha: 1)
cell.backgroundColor = UIColor.clearColor()
return cell
}
}