0

こんにちは、xCode と iPhone の開発は初めてです。1 つのページに 2 つの異なる TableView コントロールがあります。TableView #1 のデータソースにする必要がある NSArray #1 と、TableView #2 のデータソースにする必要がある NSArray #2 があります。

唯一の問題は、NSArray#1 が TableView1 と TableView2 の両方にデータを入力することです。コードを調べたところ、どの NSArray が各 TableView に属しているかを区別できる場所が見つからないようです。

どんな助けでも大歓迎です。前もって感謝します!

@interface GrainBinContentsEstimatorViewController : UIViewController
<UITableViewDelegate, UITableViewDataSource>
{
    UITableView *tableViewGrainBinType;
    UITableView *tableViewGrainType;
}

@property (strong, nonatomic) NSArray *arrayGrainBinTypes;
@property (strong, nonatomic) NSArray *arrayGrainTypes;
@property (nonatomic, retain) UITableView *tableViewGrainBinType;
@property (nonatomic, retain) UITableView *tableViewGrainType;

@implementation GrainBinContentsEstimatorViewController
@synthesize arrayGrainBinTypes, arrayGrainTypes, tableViewGrainBinType, tableViewGrainType;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.arrayGrainBinTypes = [[NSArray alloc]
                       initWithObjects:@"RF", @"RC45", @"RC60", nil];

    self.arrayGrainTypes = [[NSArray alloc]
                            initWithObjects:@"Wheat", @"Corn", @"Soybeans", @"Rice", @"Milo", @"Barley", nil]; 
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return @"Select Bin Type";
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.arrayGrainBinTypes count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = [self.arrayGrainBinTypes objectAtIndex: [indexPath row]];
    return cell;
}
4

2 に答える 2

1

すべてのデリゲートメソッド(コールバック)では、呼び出し元(テーブルビュー)がパラメーターとして渡されます。したがって、次のようにこのパラメータに基づいて切り替えることができます。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
   if (tableView == self.tableViewGrainBinType) return [self.arrayGrainBinTypes count];
   else return [self.arrayGrainTypes count];
}

あなたはアイデアを得る...

于 2012-04-29T21:52:13.073 に答える
1

はじめまして、SOです。

したがって、ここには妥当な設計概念があります。1 つの配列が 1 つのテーブル ビューにデータを入力します。テーブル ビューのデータ ソース/デリゲートは通常、UITableViewController または UIViewController ですが、そうである必要はありません。あなたの場合、それはあなたの UIViewController です。つまり、各テーブル ビューが読み込まれると、データ ソースに「行/セクションはいくつありますか?私のセルはどのように見えるでしょうか?」と尋ねられます。と他の質問。

あなたの場合、テーブルビューを区別していません! したがって、tableView1 は「私のセルはどのように見えるか? tableView:cellForRowAtIndexPath: が何を言わなければならないか見てみましょう!」と尋ねています。arrayGrainByTypes 配列から情報を提供しています。次に、tableView2 が現れて同じ質問をし、同じ方法を使用してその答えを取得します。これらの各データ ソース メソッドでは、通常、メソッドへの引数として、どのテーブル ビューがこの情報を要求しているかを指定します。したがって、どのテーブルビューが要求しているかを確認してください!

if (tableView == self.tableViewGrainType) {
    // table view 1's information is set here
else if (tableView == self.tableViewGrainBinType) {
    // table view 2's information is set here
}
于 2012-04-29T21:55:05.203 に答える