2013-09-28 14 views
13

Nach ziemlich viel Suchen in Google, Stackoverflow und Äpfel Dokumentation habe ich fast aufgegeben.UITableView Abschnitt Index überlappende Zeile Löschen-Taste

Ich mache eine App, um Kunden zu indizieren und wegen einer möglicherweise sehr langen Liste verwende ich Abschnitt Index, um schneller zu navigieren. Mein Problem ist im Bild unten dargestellt.

http://i.stack.imgur.com/i2tTx.png

Wenn ich ein Element ziehen die Schaltfläche Löschen offenbaren, ist es unter meinem Abschnitt Indexleiste teilweise verdeckt.

Ich habe keine Code-Einstellung Tabellenansicht oder TableViewcells Breite und der Abschnitt Index kann nicht wirklich geändert werden, soweit es mich betrifft.

EDIT:

Die Frage ist, wie ich die Tableview Zellen am Ende haben kann, bevor sie überlappen lassen, so dass die Löschtaste vollständig sichtbar ist.

EDIT 2:

ich bereits versucht, den Zellenrahmen kleiner ohne Erfolg einstellen.

cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width-30, cell.frame.size.height); 

Ich habe auch versucht, das gleiche mit dem Tableview, aber, wie es in einem UITableViewController ist es nicht geändert werden kann.

+0

So ... Sind Sie fragen, wie die Breite des Balkens Abschnittsindex geändert werden kann? Wie verschiebe ich den Löschen-Button, damit er nicht verdeckt wird? Sie geben nur ein Problem, ohne Fragen –

+0

Ich habe jetzt eine spezifischere Frage hinzugefügt. Ist meine Absicht jetzt klarer? – Stjernegard

+0

Es ist möglich http://i.stack.imgur.com/scNRZ.jpg –

Antwort

10

Als einfache Lösung haben wir die visuelle Überlappung des Index gelöst, indem wir die Hintergrundfarbe des Index auf clearColor gesetzt haben.

* Dies sieht optisch besser aus, aber der Index wird weiterhin Ihre TableViewCell überlappen.

Eine weitere mögliche Behelfslösung wäre die Indexleiste auszublenden, wenn Editier-Modus eingeben:

// allow editing 
[self.tableView setEditing:YES animated:YES]; 
// hides the index 
self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax; 
+2

Erstellt einen Fehlerbericht für Apple. Bis es behoben ist, muss dies tun. – Stjernegard

+0

Es würde nicht mit IOS-6 und IOS-7 funktionieren. – chandan

+1

Fügen Sie den Code nur bedingt für iOS 7 hinzu. Eine schnelle SO-Suche bietet mehrere Möglichkeiten, die iOS-Version zu erkennen. –

6

Die inEditMode Methode sollte es tun. Im Folgenden bette ich einen vollständigen Code ein, der den Index während der Bearbeitung ausblendet und nach der Bearbeitung wieder anzeigt.

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self inEditMode:YES]; 
} 

-(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self inEditMode:NO]; 
} 
//on self.editButtonItem click 
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{ 
    [super setEditing:editing animated:animated]; 
    [self inEditMode:editing]; 
} 

-(void)inEditMode:(BOOL)inEditMode{ 
    if (inEditMode) { //hide index while in edit mode 
     self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax; 
    }else{ 
     self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMin; 
    } 
    [self.tableView reloadSectionIndexTitles]; 
} 
0

einfach diesen Code verwenden, bevor sie eine Subview in cellForRowAtIndexPath Zuteilung

for (id object in cell.contentView.subviews) 
{ 
    [object removeFromSuperview]; 
} 
Verwandte Themen