2在一页上的表视图 - 两个NSArray

时间:2012-04-29 21:28:00

标签: iphone objective-c xcode

您好我是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;
}

2 个答案:

答案 0 :(得分:1)

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

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

你明白了......

答案 1 :(得分: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
}