2009-06-25 9 views
2

Ich würde gerne wissen, ob es möglich ist, die Breite einer UITableViewCell anzupassen. Ich möchte ein Bild auf der linken Seite (wie die Kontaktansicht im Adressbuch). Ich fand einen Beitrag here, der ein Bild von genau liefert, was ich zu erreichen versuche. Ich möchte auch die Antworten auf diesen Beitrag bestätigen.Kann die Breite einer UITableViewCell angepasst werden?

Antwort

2

OS3.0 hat einige Stil-Optionen in der API, die tun können, was Sie wollen.

Oder können Sie eine ganz individuelle Tabellenansicht Zelle innerhalb Interface Builder erstellen, zum Beispiel in einem meiner apps ich dies tun in meinem cellForRowAtIndexPath:

PlaceViewCell *cell = (PlaceViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [self createNewPlaceCellFromNib]; 
} 

Und das ist die Methode, um es zu graben aus Die NIB

- (PlaceViewCell*) createNewPlaceCellFromNib { 
    NSArray* nibContents = [[NSBundle mainBundle] 
          loadNibNamed:@"PlaceCell" owner:self options:nil]; 
    NSEnumerator *nibEnumerator = [nibContents objectEnumerator]; 
    PlaceViewCell* placeCell = nil; 
    NSObject* nibItem = nil; 
    while ((nibItem = [nibEnumerator nextObject]) != nil) { 
     if ([nibItem isKindOfClass: [PlaceViewCell class]]) { 
      placeCell = (PlaceViewCell*) nibItem; 
      if ([placeCell.reuseIdentifier isEqualToString: @"Place" ]) { 
       //NSLog(@"PlaceCell - we have a winner!"); 
       break; // we have a winner 
      } else { 
       placeCell = nil; 
       NSLog(@"PlaceCell is nil!"); 
      } 
     } 
    } 
    return placeCell; 
} 

Dann können Sie die UITableViewCell-Unterklasse direkt in Interface Builder erstellen.

+0

Denkst du mich in Richtung dieser nützlichen APIs? Ich schaute auf die 2.2/3.0 Diffs doc und konnte die neuen Stiloptionen, über die Sie sprechen, nicht finden. Hilft es auch, die benutzerdefinierte Ansichtszelle in Interface Builder aus irgendeinem Grund zu erstellen? Ich habe keine Probleme beim Erstellen der Zelle, ich habe nur Probleme, die Breite anzupassen. –

+0

siehe Antwort von Daskaja für Details der vordefinierten Zellansicht Stile in 3.0 – frankodwyer

0

IMO Sie dürfen die Breite einer UITableViewCell nicht ändern, aber zum Glück müssen Sie nicht. Apple stellt vier Standardstile zur Verfügung, die ein Bild am linken Rand der Zelle anzeigen können (wenn Sie es an einer anderen Stelle platzieren möchten, müssen Sie ein benutzerdefiniertes Layout erstellen).

Die vier Arten von UITableViewCellStyle sind:

  • UITableViewCellStyleDefault
  • UITableViewCellStyleSubtitle
  • UITableViewCellStyleValue1
  • UITableViewCellStyleValue2

Um ein Bild in ein UITableViewCell einbetten Sie shou ld die Tableview Programmieranleitung bei Apples Developer Connection Netzwerk lesen: Using Cell Objects in Predefined Styles

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 
    NSDictionary *item = (NSDictionary *)[self.content objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [item objectForKey:@"mainTitleKey"]; 
    cell.detailTextLabel.text = [item objectForKey:@"secondaryTitleKey"]; 
    NSString *path = [[NSBundle mainBundle] pathForResource:[item objectForKey:@"imageKey"] ofType:@"png"]; 
    UIImage *theImage = [UIImage imageWithContentsOfFile:path]; 
    cell.imageView.image = theImage; 
    return cell; 
} 
+0

Vielen Dank für das Teilen, aber sie scheinen nicht nützlich für das, was ich zu erreichen versuche. Ich möchte, dass sich das Bild außerhalb der Zelle befindet (genau links von der Zelle versetzt), wie das Bild in dem Post, den ich verlinkt habe, zeigt. Auch hier möchte ich das Bild nicht in der Zelle haben. Öffnen Sie Kontakte auf Ihrem iPhone oder iPod touch und gehen Sie in die Details einer Person.Sie können genau sehen, was ich dort zu erreichen versuche. Es gibt einen Bildversatz links von den Zellen oben. –

+0

Ok ich sehe, aber Sie sollten wirklich lesen, dass Tableview Programmieranleitung. Unter den erklärten Wegen gibt es einen anderen Weg. Wenn Sie UITableViewCell vollständig ableiten, sind Sie völlig frei in dem, was Sie rendern möchten. –

0

Sie brauchen nicht die Breite der Zelle zu ändern. Was Sie wirklich brauchen, ist, dass die Zelle wie aussieht. Sie hat eine andere Breite (z. B. durch Ändern der Breite ihrer sichtbaren Unteransicht).

Leider funktioniert Ihr Link nicht, daher kann ich nicht genauer sein.

Sie können auch versuchen, tableView:indentationLevelForRowAtIndexPath: Methode in UITableViewDelegate Protokoll zu betrachten.

Verwandte Themen