2017-07-07 3 views
0

UITableViewControllerが非常にひどく鼓動しているため、私はリファクタリングを行っています。私がやろうとしている最初のものは、このようなテーブルビューコントローラのうち、データソースのリファクタリングされています。私のデータソースクラスでUITableViewControllerのロジックをUITableViewDataSourceクラスで使用する

// In my UITableViewController 
let ds = MyDataSource() 

func viewDidLoad() { 
    tableView.dataSource = ds 
} 

、私はテーブルに属している必要があります感じて、いくつかのロジックを使用したいですビューコントローラ。

class MyDataSource: UITableViewDataSource { 
    func numberOfSections(in tableView: UITableView) -> Int { 
    // I want to use the variable showMore here 
    return showMore ? 2 : 1 
    } 

    // More data source doe 
} 

変数showMoreは私のテーブルビューコントローラに定義されたブール変数であり、セクションのフッタビューでボタンによって更新されます。

showMoreがテーブルビューコントローラに属している場合、データソースクラスからどのようにアクセスできますか? テーブルビューコントローラに属していない場合は、それはどこに属し、なぜですか?

ありがとうございます!

+0

showMoreプロパティをVCとDSの両方に追加します。 VCで変更されるたびに、それをDSに渡して、テーブルをリロードします。または、ユーザーがボタンをたたくとDSに値を更新し、テーブルをリロードするようDSに指示します。 – Koen

答えて

0

は、まずそれが心に来ると思った - と私はちょうどあなたのニーズに合うかもしれない... Xcodeで書いていない、これらの線に沿って

// footerButtonTap 
if let ds = tableView.dataSource as? MyDataSource { 
    ds.showMore = !ds.showMore 
    tableView.reloadData() 
} 

か何かを入力しています。

+1

'showMore'には、実際に値が –

0

UITableViewControllerは、ビューの代わりにtableViewを含み、すぐにUITableViewDataSourceUITableViewDelegateに準拠するだけでなく、Appleの便利なUIViewControllerの実装です。 UIViewControllerを使用してtableViewを追加してから、テーブルのデリゲートとデータソースをMyCustomTableControllerに設定するようにしてください。UITableViewDataSourceUITableViewDelegateの両方に準拠しています。すべてのロジックはコントローラ内で処理する必要があります。

+0

に基づいて要素を変更する' didSet'が添付されていますが、テーブルビューコントローラは+1000行に膨張しています。機能/デバッグを維持管理し、それゆえの質問です。 – 7ball

+0

はい、これは、テーブルビューコントローラを分割することをお勧めしている理由です。 – cloudcal

関連する問題