0

私はフィルムをリストするPFQueryTableViewControllerを持っています。私のナビゲーションバーにはフィルターボタンがあり、ユーザーがそれを押すとUIPopoverPresentationControllerと表示されます。このポップオーバーは、単にUITableViewにいくつかのオプションを表示します。SwiftのPFQueryTableViewController内のオブジェクトをフィルタリングするためにTableviewセルデータを返す

enter image description here

ゴール

ユーザーがポップオーバーでオプションを選択すると、私はオプションのインデックスは、メインPFQueryTableViewControllerに戻って渡され、それに応じてテーブルを更新する必要があります下の画像を参照してください。 。また、ポップオーバーコントローラを閉じることもできます。

私は既にテーブルを並べ替える方法を知っています。選択したオプションを戻す方法を知っていて、それをifステートメントに追加してParseクエリをフィルタする方法が必要です。例えば、ユーザは最高の評価でフィルタを選択した場合、私のqueryForTable()機能では、私は次のようなものを出してあげる:

if XXXXXXXXXXXX { 

query.orderByDescending("highestRated") 

} 

そして、私はすでにポップオーバーのVCを作成しましたし、それが動作します。

うまくいけば、これは理にかなっています。私のポップオーバー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 
} 

} 

答えて

1

ここでプロトコル/代理人を使用できます。あなたのpopviewcontrollerはtableviewcontrollerかtableviewを持ちます。このコントローラーをポップオーバーと呼ぶ必要があります。 popOverControllerのdidselectでデリゲート関数を呼び出し、必要に応じてselectオプションを文字列/インデックスとして渡します。このデリゲートメソッドは、ビューコントローラで実装されます。ビューコントローラでは、テーブルをソートしてリロードできます。

ここに私が作成したデモがあります。要件ごとに同じものを更新することができます。 ViewController.swiftチェックで

https://github.com/quantumarun/Demos/tree/master/PopOverDemo

機能について

func sortSelection(selectedItem: Int) 

これはポップオーバーで選択したときに呼び出されるデリゲート関数です。必要ならば、Intの代わりに文字列を渡すこともできます。

+0

お返事ありがとうございます。コードに私がどのように追加できるかを教えてもらえますか?問題が発生している場所で、事前に感謝しています。 – Nick89

+0

これは本当に助けになりました!おかげさまで、完璧に働いています! – Nick89

関連する問題