Hallo,
In meiner App für Ipad benutze ich eine uitableview. Jede Zelle enthält 2 Labels und mehrere Buttons. Die Labels sind bereits ind der Klasse der Zelle definiert, die Buttons erzeuge ich dynamisch in der Funktion:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Da die Tabelle mehr Zellen enthält, als dargestellt werden können, muss der User "scrollen". Dabei kommt es zu einem (für mich) unerklärlichen Phenomän:
Die dynamisch erzeugten Buttons bleiben nicht in der Zelle, in der Sie erzeugt wurden, sondern "springen" hin und her; die Labels hingegen sind immer richtig.
Der Code für die Zellenerzeugung sieht wie folgt aus:
Alles anzeigen
Hat jemand ne Idee, wieso die Buttons nicht in den Zellen bleiben, in denen ich sie erzeuge?
In meiner App für Ipad benutze ich eine uitableview. Jede Zelle enthält 2 Labels und mehrere Buttons. Die Labels sind bereits ind der Klasse der Zelle definiert, die Buttons erzeuge ich dynamisch in der Funktion:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Da die Tabelle mehr Zellen enthält, als dargestellt werden können, muss der User "scrollen". Dabei kommt es zu einem (für mich) unerklärlichen Phenomän:
Die dynamisch erzeugten Buttons bleiben nicht in der Zelle, in der Sie erzeugt wurden, sondern "springen" hin und her; die Labels hingegen sind immer richtig.
Der Code für die Zellenerzeugung sieht wie folgt aus:
Quellcode
- static NSString *cellIdentifier = @"atributValuesCell";
- atributValueCell_Pad *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
- Attribut *a= [steckerAttribute objectAtIndex:indexPath.row];
- AttributValue *av = a.atributvalueRel;
- Wert *settedValue = av.value;
- CGSize maximumSize = CGSizeMake(250, 999);
- UIFont *myFont = [UIFont systemFontOfSize:17];
- CGSize myStringSize = [[NSString stringWithFormat:@" %@ ",a.name] sizeWithFont:myFont constrainedToSize:maximumSize];
- [cell.atributNameLabel setFrame:CGRectMake(212, 2, myStringSize.width, cell.atributNameLabel.frame.size.height)];
- [cell.settedValueNameLabel setFrame:CGRectMake(cell.atributNameLabel.frame.origin.x+cell.atributNameLabel.frame.size.width+2, cell.atributNameLabel.frame.origin.y, 250, cell.atributNameLabel.frame.size.height)];
- cell.settedValueNameLabel.text = settedValue.name;
- cell.atributNameLabel.text = [NSString stringWithFormat:@" %@ ",a.name];
- //werteArray nach name sortieren
- NSMutableArray *werteArr = [NSMutableArray arrayWithCapacity:0];
- [werteArr addObject:defaultValue];
- NSMutableArray *werteArr2 = [NSMutableArray arrayWithArray:[a.werteRel allObjects]];
- NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO];
- [werteArr2 sortUsingDescriptors:[NSArray arrayWithObject:sort]];
- [werteArr addObjectsFromArray:werteArr2];
- int j=0;
- for (Wert *w in werteArr)
- {
- //NSLog(@"wert:%@",w.name);
- //für jeden Wert des Attributes ein button, falls nicht bereits vorhanden
- int tag = (indexPath.row+1)*1000+j;
- UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(moveRowManually:)];
- //erster Ausfruf -> Buttons erzeugen
- UIButton *ib;
- if([[steckerButtonsCreated objectAtIndex:indexPath.row] isEqualToString:@"false"])
- {
- ib = [UIButton buttonWithType:UIButtonTypeCustom];
- [ib setFrame:CGRectMake((j+1)*80+50, 27, 72,72)];
- [ib setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",w.wertId]] forState:UIControlStateNormal];
- //[ib setTitleColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1] forState:UIControlStateNormal];
- //[ib setTitle:w.name forState:UIControlStateNormal];
- //[ib addGestureRecognizer:panGesture];
- if ([w.possible isEqualToString:@"1"])
- {
- [ib addTarget:self action:@selector(selectValue:) forControlEvents:UIControlEventTouchUpInside];
- [ib addGestureRecognizer:panGesture];
- [ib setImage:nil forState:UIControlStateNormal];
- }
- else
- {
- [ib setImage:[UIImage imageNamed:@"not_selectable_layer.png"] forState:UIControlStateNormal];
- }
- ib.tag = tag;
- [ib setContentMode:UIViewContentModeCenter];
- [cell.contentView addSubview:ib];
- }
- else
- {
- ib = (UIButton*) [self.view viewWithTag:tag];
- if ([w.possible isEqualToString:@"1"])
- {
- //NSLog(@"add Target for wert:%@ in attribut:%@", w.name, a.name);
- [ib addTarget:self action:@selector(selectValue:) forControlEvents:UIControlEventTouchUpInside];
- [ib addGestureRecognizer:panGesture];
- [ib setImage:nil forState:UIControlStateNormal];
- }
- else
- {
- //NSLog(@"remove Target:%@ for wert:%@ in attribut:%@",ib, w.name, a.name);
- [ib removeTarget:self action:@selector(selectValue:) forControlEvents:UIControlEventTouchUpInside];
- [ib removeGestureRecognizer:panGesture];
- [ib setImage:[UIImage imageNamed:@"not_selectable_layer.png"] forState:UIControlStateNormal];
- }
- }
- j++;
- }
- //[self moveRowToSelectedValues];
- [steckerButtonsCreated replaceObjectAtIndex:indexPath.row withObject:@"true"];
- return cell;
Hat jemand ne Idee, wieso die Buttons nicht in den Zellen bleiben, in denen ich sie erzeuge?