#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];