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