0

您好,我是 xCode 和 iPhone 开发的新手。我在一页上有两个不同的 TableView 控件。我有 NSArray #1 需要作为 TableView #1 的数据源和 NSArray #2 需要作为 TableView #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

在每个委托方法(回调)中,调用者(tableview)作为参数传递。因此,您可以根据此参数进行切换,例如:

- (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。

所以,你在这里有一个合理的设计理念:一个数组填充一个表视图。表格视图的数据源/委托通常是 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 回答