2

配列カウントに基づいてスクロールビューに複数のテーブルビューを追加しています...コードはこちら

int currentX = 3;
for(int i=0;i<[restNameArray count]; i++)
{

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:CGRectMake(currentX, 0, 150, 35)];
    button.tag = i+1;
    //[button setUserInteractionEnabled:NO];
    [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [button setBackgroundImage:[UIImage imageNamed:@"ohris_applytics_ipad_middle_oc.png"] forState:UIControlStateNormal];
    button.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:15.0f];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [button setTitle:[NSString stringWithFormat:@"%@", [restNameArray objectAtIndex:i]] forState:UIControlStateNormal];

    restaurantTable = [[UITableView alloc] initWithFrame:CGRectMake(currentX, 35, 150, 310) style:UITableViewStylePlain];
    [restaurantTable setTag:i+1];
    [restaurantTable setBackgroundColor:[UIColor whiteColor]];
    restaurantTable.delegate = self;
    restaurantTable.dataSource = self;
    [scrollView addSubview:button];
    [scrollView addSubview:restaurantTable];

    NSLog(@"tag %d",restaurantTable.tag);
    currentX = restaurantTable.frame.size.width+currentX+3;

    [tagArray addObject:[NSString stringWithFormat:@"%d", restaurantTable.tag]];
}
NSLog(@"aaaa %@", tagArray);
[scrollView setContentSize:CGSizeMake(currentX, 349)];

シミュレーターでは問題なく表示されています。そして、テーブルビューに配列を設定する必要があります。そして cellforrowatindexpath のコードは

   if(tableView == restaurantTable){
    for (int i =0;i<[tagArray count];i++)
    {
      table1Array = [[[restSalesArray objectAtIndex:i]componentsSeparatedByString:@","]mutableCopy];

    NSLog(@"Sales array :%d %@", i, table1Array);
    cell.textLabel.text = [formatter stringFromNumber:[NSNumber numberWithInteger:[[table1Array objectAtIndex:indexPath.row]intValue]]];
    cell.textLabel.textAlignment = NSTextAlignmentCenter;
    }
}

しかし、問題は、最後のテーブルビューにのみデータが取り込まれていることです..残りは空です...助けてください....

4

4 に答える 4

3

あなたがやろうとしていることは大丈夫です。しかしrestaurantTable、for ループで変数をオーバーライドしています。したがって、変数は最後のテーブル ビューです。メソッド内の if と比較できるようにするには、それらを配列または個別の変数に追加する必要がありますcellForRowAtIndexPath

_allTableViews はヘッダー ファイルで定義されています

あなたはループのために

_allTableViews = [NSMutableArray array];  

for (.....) {
.
.
.
UITableView *tableView = [[UITableView alloc] initWith....];

.
.
.

[_allTableViews addObject tableView];
}

cellForRowAtIndePath

NSInteger tableIndex = [_allTableViews indexOfObject:tableView];
// Now you have the index of table view
switch (tableIndex) {
case 0:
// first table
break;
case 1:
// second table
break;
default:
break;
}
于 2012-12-27T14:44:41.267 に答える
2

各 tableView をアウトレット名またはタグで比較する必要があります。

として :

if(tableView == _restaurantTableOutlet){ 
    ...
}
else  if(tableView == _barTableOutlet){
    ...
}
else  if(tableView == _loungeTableOutlet){
    ...
}
于 2012-12-27T14:38:13.493 に答える
0

各テーブル ビューを に保存しているrestaurantTableため、以前のテーブル ビューへの参照は失われます。それらをすべて配列に格納するか、それらのいずれも格納しないでください

なぜあなたはチェックしていますif(tableView == restaurantTable)か?タグごとにテーブルを確認し、それぞれを個別に操作する必要があります

于 2012-12-27T14:34:59.743 に答える
0

まず、各 tableView にタグを割り当てる必要があります。次に、次のコードで特定のテーブルの選択された行を取得できます:-

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int tableTag = tableView.tag;
    if(tableTag==0)
    {
         //do something here
    }
    else if(tableTag==1)
    {
         //do something here
    }
}
于 2012-12-28T06:55:57.620 に答える