2017-11-28 1 views
0

Google Place IOS SDKで使用されているパターンがきれいでよく設計されていることがわかりました。基本的には、次のリンゴのプレゼンテーションに表示されている内容に従います。Advanced User interface with Collection view(スライド46を開始)。Dynamic TableViewDataSourceを使用してテーブルビューを更新する方法はありますか?

これは、GMSAutocompleteTableDataSourceで実装されているものです。 テーブルビューの状態を定義するのはデータソースまでです。 テーブルビューをリンクします。そして、何かがイベントを変更するたびにデータソースにバインドされ

var googlePlacesDataSource = GMSAutocompleteTableDataSource() 
tableView.dataSource = googlePlacesDataSource 
tableView.delegate = googlePlacesDataSource 

googlePlacesDataSource.sourceTextHasChanged("Newsearch") 

データソースがクエリを実行するには、結果を表示し、その後ロードとしてテーブルビューを設定します。

私は私のカスタムソースからこれを達成したいと思います:

class JourneyTableViewDataSource:NSObject, UITableViewDataSource, UITableViewDelegate{ 
    private var journeys:[JourneyHead]?{ 
     didSet{ 
     -> I want to trigger tableView.reloadData() when this list is populated... 
     -> How do I do that? I do not have a reference to tableView? 
     } 
    } 

    override init(){ 
     super.init() 
    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 
    ... 
} 

任意のアイデア?

答えて

0

データソースは、を知らないでください。何かテーブルビューについて。これはこのパターンの基本であり、再利用の面で多くの力を与えます。

あなたの目的のために最善の解決策は、プロパティの閉鎖を使用することです:

var onJourneysUpdate: (() -> Void)? 

private var journeys: [JourneyHead]? { 
    didSet { 
     onJourneysUpdate?() 
    } 
} 

そして、あなたはあなたのデータソースを設定する時点で、あなたは、データソースの列を更新した後に実行したいと思いますどんなアクションを設定できます。

var googlePlacesDataSource = JourneyTableViewDataSource() 
tableView.dataSource = googlePlacesDataSource 
tableView.delegate = googlePlacesDataSource 
googlePlacesDataSource.onJourneysUpdate = { [unowned self] in 
    self.tableView.reloadData() 
} 
+0

お返事ありがとうございます。これは私の計画ですB. :(GMSAutocompleteTableDataSourceはそれをしません。それは更新するか、またはテーブルビューのリフレッシュをトリガーする状態で何かを行う方法を管理します... Googleのデータソースはマシンの状態を実装し、テーブルビューを更新しますアップロード/結果の取得/結果なし...どのようにそれらを行うのですか? –

+0

GMSAutocompleteTableDataSourceDelegateをチェックしましたか? didUpdateAutocompletePredictionsForTableDataSourceメソッドがあります。通常、人々は通常、自分のテーブルビューのリロードコードを入れています(グーグルで見た限り) –

+0

はい、私はやったし、私はそれを使用するようにGoogleのドキュメントに記載されています。メソッドdidUpdateAutocompletePredictionsForTableDataSource他のアクションを実行するために使用することができますが、私のテーブルビューを更新するために使用する必要はありません。ソース "sourceTextHasChanged"はメインスレッドから呼び出さなければなりません(正確な理由によりそれはテーブルビューを更新:)) –

0

動的なテーブルビューを更新するために、あなたはreloadDatareloadDataアップデートデータソースを追加する必要があります。

self.tableview.reloadData() 
+0

答えをありがとうが、データソースは、テーブルビューへの参照を持っていません。だから、reloadDataを呼び出すことはできません...これは私の問題です:( –

関連する問題