2013-09-28 16 views
13

Dopo aver cercato parecchio su Google, la documentazione StackOverflow e le mele, ho quasi rinunciato.UITableView Indice sezione pulsante di eliminazione righe sovrapposte

Sto creando un'app per indicizzare i clienti e, a causa di un elenco potenzialmente molto lungo, utilizzo l'indice di sezione per navigare più velocemente. Il mio problema è mostrato nella foto qui sotto.

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

Quando ho trascinare un elemento per rivelare il tasto di cancellazione, è parzialmente nascosta sotto il mio bar indice di sezione.

Non ho alcuna impostazione di tabella tableview o tableviewcells e l'indice della sezione non può essere modificato, per quanto mi riguarda.

EDIT:

La domanda è: come posso avere le cellule Tableview finiscono prima che vengano sovrapposti, in modo che il tasto di cancellazione è completamente visibile.

EDIT 2:

già provato a fissare il telaio di cella minore senza alcuna fortuna.

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

Ho anche provato lo stesso con tableView, ma come in un UITableViewController non possono essere ridimensionati.

self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width-30, self.tableView.frame.size.height); 
+0

Quindi ... Stai chiedendo come la larghezza della barra dell'indice sezione può essere cambiato? Come spostare il pulsante Elimina in modo che non sia coperto? Hai appena detto un problema, senza domande –

+0

Ho aggiunto una domanda più specifica ora. La mia intenzione è più chiara ora? – Stjernegard

+0

E 'possibile http://i.stack.imgur.com/scNRZ.jpg –

risposta

10

Come semplice aggirare abbiamo risolto la sovrapposizione visiva dell'indice impostando il colore dell'indice per clearColor sfondo.

self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 

* Questo aspetto è visivamente migliore, ma l'indice si sovrapporrà ancora a TableViewCell.

Un'altra possibile work-around sarebbe quello di nascondere la barra di indice quando si entra in modalità di modifica:

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

Creato un bug report per Apple. Fino a quando non viene corretto, questo deve essere fatto. – Stjernegard

+0

Non funzionerebbe con entrambi IOS-6 e IOS-7. – chandan

+1

Basta aggiungere il codice in modo condizionale solo per iOS 7. Una rapida ricerca SO mostrerà diversi modi per rilevare la versione di iOS. –

6

Il metodo inEditMode dovrebbe fare il trucco. Di seguito incorpora un codice completo che nasconde l'indice durante la modifica e lo mostra di nuovo quando viene eseguito il montaggio.

-(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

basta usare questo codice prima di assegnare qualsiasi visualizzazione secondaria in cellForRowAtIndexPath

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