Вставка данных UITableView

#ios #objective-c #iphone #xcode #uitableview

#iOS #objective-c #iPhone #xcode #uitableview

Вопрос:

У меня проблема с uitableview, я взял 3 раздела в сгруппированной таблице, вставил данные для каждого раздела с помощью indexPath.раздел все хорошо, но 3-й раздел заполнен данными как 1-го, так и 2-го разделов, как удалить эти данные и как заполнить мои собственные данные, означает отдельные данные? Код является:-

  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0) {

        return @"Product Details";
    }

    if (section == 1) {

        return @"Ingredients";
    }
    if (section == 2) {
        return @"My Allergies";
    }
return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    if (indexPath.section == 0) {
        return 150;
    }   
    if (indexPath.section == 1) {
        return 100;
    }
    if (indexPath.section==2) {
        return 45;
    }


    return 0;

}
- (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] autorelease];

     }
    NSMutableString *redStr1 =[[NSMutableString alloc] initWithString:@"No" ];
    NSMutableString *yellowStr1 =[[NSMutableString alloc] initWithString:@"No" ];
    NSMutableString *greenStr1 =[[NSMutableString alloc] initWithString:@"No" ];


    int a = [appDelegate.reIndex intValue];


    NSDictionary *aDict1   = [[NSDictionary alloc]init];
    aDict1 = [appDelegate.ProductArray objectAtIndex:a];

    // NSMutableString *str = [aDict1 objectForKey:@"IngredientInfo"];

    NSMutableArray *array =[aDict1 objectForKey:@"IngredientInfo1"];    
    NSMutableString *nameStr =  [[NSMutableString alloc] init];
    NSMutableString *nameClr =  [[NSMutableString alloc] init];



    for (int s=0; s<[array count]; s  ) {
        NSDictionary *nameDict = [array objectAtIndex:s];
        [nameStr appendString:[nameDict objectForKey:@"Name"]];
        nameClr = [nameDict objectForKey:@"HalaStatus"];

        if ([nameClr isEqualToString:@"Red"]) {

            [redStr1 setString:@"Yes"];
        }

        if ([nameClr isEqualToString:@"Yellow"]) {
            [yellowStr1 setString:@"Yes"];
        }

        if ([nameClr isEqualToString:@"Green"]) {
            [greenStr1 setString:@"Yes"];
        }

        if (s == [array count]-1) {
            [nameStr appendFormat:@"."]; 
        }
        else {
            [nameStr appendFormat:@","];
        }

    }


if (indexPath.section == 0) 
    {

    cell.userInteractionEnabled =NO;
    imgview1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"images (1).jpg"] ];
    [imgview1 setFrame:CGRectMake(12, 2, 100, 145)];
    [cell addSubview:imgview1];
        [imgview1 release];

    imgview = [[UIImageView alloc]initWithFrame:CGRectMake(255,2 , 50, 45)];
    [cell addSubview:imgview];
    if ([redStr1 isEqualToString:@"Yes"]) {
        [imgview setImage:[UIImage imageNamed:@"Red.png"]];
    }
    if ([redStr1 isEqualToString:@"No"] amp;amp; [yellowStr1 isEqualToString:@"Yes"] ) {
        [imgview setImage:[UIImage imageNamed:@"Yellow.png"]];
    }
    if ([redStr1 isEqualToString:@"No"] amp;amp; [yellowStr1 isEqualToString:@"No"] amp;amp; [greenStr1 isEqualToString:@"Yes"]) {
        [imgview setImage:[UIImage imageNamed:@"Green.png"]];
    }

    }


 if (indexPath.section == 1) {
    UITextView *textview1;
    textview1 =[[UITextView alloc]initWithFrame:CGRectMake(12, 2, 294, 96)];
    textview1.text = nameStr;
    textview1.editable =NO;
    [textview1 setFont:[UIFont systemFontOfSize:15]];
    [cell addSubview:textview1];



}


if (indexPath.section == 2) {


cell.textLabel.text = [arr objectAtIndex:indexPath.row];

}

return cell;
}
  

Комментарии:

1. проблема может быть в TableView:numberOfRowsInSection:. Не могли бы вы также опубликовать этот метод?

Ответ №1:

если у вас есть массив и вы обращаетесь к нему через cellForRowAtIndexPath: with indexPath.row , вы получите для всех разделов одни и те же, скажем, три элемента.

Что вам нужно сделать, так это массив внутри массива:

 Level 1 Section 1
  Level 2 Row 1
  Level 2 Row 2
  Level 2 Row 3
Level 1 Section 2
  Level 2 Row 1
  Level 2 Row 2
Level 1 Section 3
  Level 2 Row 1
  Level 2 Row 2
  Level 2 Row 3
  

Комментарии:

1. вы разбиваете свои данные на разделы. Первый массив содержит ваши разделы, и каждый элемент содержит другой массив: данные / строки. Затем вы можете получить к нему доступ, указав [[myArray objectAtIndex:section] objectAtIndex:row];