2016-12-22 5 views
0

UITableViewの複数のインスタンスを作成したいと思います。私は、私のビューコントローラと各タブバーの項目には、私はWebサービスから来るデータでテーブルビューをロードする必要がありますtabbarを持っています。私はストーリーボードを使用してTableviewを作成しました。UitableViewの複数のインスタンスを作成する方法は?

  1. テーブルビューの各インスタンスは異なるデータを持ちます。
  2. uitabbaritemをクリックすると、それぞれのtabbleviewインスタンスがリロードされます。

私はUITabBarControllerを使いたくありません。私がしたいのは、シングルビューコントローラとシングルテーブルビューを使用することだけです。

また私は私のアプローチと混同しています。私は必要なすべてのものがtableviewを更新することですので、単一のビューコントローラを使用すると良いですか?私の意見では、UItabbarcontrollerを使用する必要はありません。

+2

@VladHatkoまあ、同じテーブルビューを使用して2セットのデータそれに – JAL

+0

@Rohit palod複数のtableViewを作成する場合は、複数のメモリがあるとみなし、1つのtableViewを使用して、アイテムを切り替えるときに複数のdataSourceを読み込むことができます。複数のtableViewを使用することは推奨ではありませんが、isHiddenを設定して要件を関連付けることもできます。 – aircraft

+0

TableViewsはUI要素です。 'UITableViewDataSource'を使って、テーブルのデータとカスタマイズを提供します。 2つの画面がtableViewで使用されているデータの外側でまったく同じである場合は、1つの表を使用して、それが使用するデータを操作する必要があります。 – Connor

答えて

0

要件に基づいて。タブバーの最適な使用例は、複数のインスタンスを同時に処理し、維持することです。あなたが食事のアプリケーションに取り組んでいるような状況を想像してみてください。各タブごとに、tableviewにロードされたさまざまなオプションを表示する必要があります。それらのすべてのタブは、テーブルビューのさまざまな状態を維持します。単一のビュー・コントローラー内のものを維持すると、古いデータをリフレッシュして置き換えて新しいデータを画像に取り込まなければならない場合。ここでは、テーブルビューデータをロードするたびに必要です。だから、あなたの要件に基づいて、タブバーを使用するかどうか考えています。一度に複数のテーブルビューの異なる状態を維持したくない場合は、singleView ControllerとSingle Tableviewを参照してください。

+0

私は@ConnorNevilleのコメントに返信しました。私はそれが複数のタブのために同じテーブルを使用すると良いことではないことを知っている、毎回私はテーブルをリロードする必要があります。だから、私は複数のインスタンスを要求したので、あるタブから別のタブに移動すると、テーブルをリロードする必要はありません。 –

0

UITableViewのインスタンスを1つだけ保持して、タブバーの選択を使用して、使用するデータソースを決定できます。ストーリーボードのビューコントローラーを設定して、タブバーと単一のテーブルビューを含む実例を示します。

#import "ViewController.h" 

@interface ViewController() <UITableViewDataSource, UITabBarDelegate> 

@property(weak,nonatomic) IBOutlet UITableView *tableView; 
@property(weak,nonatomic) IBOutlet UITabBar *tabBar; 
@property(strong,nonatomic) NSArray *model; 

@end 

私たちのモデルは3つの配列で、タブバーの各タブに1つずつあります。これらの配列はここではハードコードで初期化されていますが、Webサービスから初期化することもできます。

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSArray *dataSource0 = @[ @"A", @"B", @"C" ]; 
    NSArray *dataSource1 = @[ @"1", @"2", @"3"]; 
    NSArray *dataSource2 = @[ @"doh", @"ray", @"me"]; 
    self.model = @[ dataSource0, dataSource1, dataSource2 ]; 

    self.tabBar.selectedItem = self.tabBar.items[0]; 
} 

// the user pressed a tab, reload the table 
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    [self.tableView reloadData]; 
} 

// this is an important part: our data for the table is determined by 
// which tab is selected, return of the arrays, corresponding to the selection 
- (NSArray *)currentDataSource { 
    UITabBarItem *item = self.tabBar.selectedItem; 
    NSInteger index = [self.tabBar.items indexOfObject:item]; 
    return self.model[index]; 
} 

// these datasource methods always refer to the currentDataSource 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self currentDataSource].count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    NSString *text = [self currentDataSource][indexPath.row]; 
    cell.textLabel.text = text; 
    return cell; 
} 

@end 
+0

ありがとう、それは私を助けません。あるタブから別のタブに移動するたびに、テーブルをリロードしたくないのです。時間がかかり、ユーザーはそれを感謝しません。 –

+0

今、私はなぜあなたが質問をしたのか理解しています。あなたはテーブルを再ロードするという意味を誤解しています。データを再度取得することを意味するわけではありません。可視のセルを再描画することだけを意味します。ユーザーには表示されません。ビデオの1フレームとほぼ同じ時間がかかります。 vcが表示されたら(または前に)データを取得します。テーブルの内容を変更して、1回の実行ループサイクルで再描画する – danh

関連する問題