2012-01-31 17 views
13

Qualcuno può aiutarmi su come rendere UIView creato in codice per essere in cima a tutte le altre viste? dove tableView è la vista genitore e il subSelectionView è la mia vista personalizzata fratelli, voglio farlo sopra la tabellaView .. Ho questo codice qui sotto:Posiziona UIView in cima a tutte le altre viste

Questo è il codice sorgente completo per il mio didSelectRowAtIndexPath :, da dove io aggiungo programmazione esempio UIView ..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Execute upon selection 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    [[tableView viewWithTag:199]removeFromSuperview]; 

    // Get the cell size 
    CGSize cellSize = [tableView cellForRowAtIndexPath:indexPath].frame.size; 

    // Contact Details Container 
    UIView *subSelectionView; 
    if(indexPath.row < [contacts count] - 6) 
     subSelectionView = [[UIView alloc]initWithFrame:CGRectMake(10, 0, (int)cellSize.width - 20, (int)cellSize.height + 130)]; 

    subSelectionView.backgroundColor = [UIColor grayColor]; 
    subSelectionView.layer.borderColor = [UIColor grayColor].CGColor; 
    subSelectionView.layer.borderWidth = 1; 
    subSelectionView.alpha = 0.9; 
    subSelectionView.tag = 199; 
    subSelectionView.layer.cornerRadius = 5.0; 


    // Contact Name Container 
    UIView *contactNameSubSelectionView; 
    if(indexPath.row < [contacts count] - 6) 
     contactNameSubSelectionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width - 20, (int)cellSize.height)]; 

    contactNameSubSelectionView.backgroundColor = [UIColor grayColor]; 
    contactNameSubSelectionView.alpha = 0.5; 

    [subSelectionView addSubview:contactNameSubSelectionView]; 


    // Contact Name Label 
    Contacts *contact = [self.contacts objectAtIndex:indexPath.row]; 
    NSString *contactName = [NSString stringWithFormat:@" %@ %@ ", contact.fname, contact.lname]; 

    UILabel *contactNameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, (int)cellSize.width, (int)cellSize.height)]; 
    contactNameLabel.layer.cornerRadius = 4.0; 

    [contactNameLabel setText: contactName]; 
    [contactNameLabel setTextColor:[UIColor blackColor]]; 
    [contactNameLabel setFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]]; 
    [contactNameSubSelectionView addSubview:(UIView *)contactNameLabel]; 


    // Buttons 
    UIButton *buttonMobile = [[UIButton alloc]initWithFrame:CGRectMake(10, cellSize.height + 10, 30, 30)]; 
    buttonMobile.layer.borderWidth = 1; 
    [buttonMobile setTitle:@"..." forState:UIControlStateNormal]; 
    [buttonMobile addTarget:self action:@selector(btPressed:) forControlEvents:UIControlStateNormal]; 

    [subSelectionView addSubview:(UIView *) buttonMobile]; 



    [[tableView cellForRowAtIndexPath:indexPath]insertSubview:subSelectionView aboveSubview:self.view]; 
    [self.parentViewController.view bringSubviewToFront:subSelectionView]; 


    [tableView reloadData]; 

} 

ma non funziona ..

l'immagine sotto mostra la mia subSelectionView, il pulsante è all'interno di esso e la subSelectionView è all'interno del tableView. Ora, quando ho cliccato su quel pulsante, il problema è che non posso realmente cliccarlo. Si concentra direttamente sul TableView anche con la presenza dei miei codici. Qualcuno può aiutarmi per favore? ....

enter image description here

risposta

6

Se ho letto la tua domanda giusta il vostro problema è che non si può effettivamente toccare il tasto nella vostra nuova vista che è in cima alla Tableview?

E quando lo si tocca, l'UITableView di seguito risponde?

Ciò significa che UIButton non riconosce che viene toccato e l'evento passa alla sottoview successiva sotto di esso per essere elaborato.

Ora, ci sono molte possibili cause di tale comportamento - si può avere interazione con l'utente disabilitato per esso o l'UIView, può è Enabled proprietà impostata su NO o può essere al di là dei vincoli della UIView (iOS automaticamente presuppone che se un tocco si trova al di fuori del rettangolo di limiti ha mancato il ricevitore).

Inoltre, i tocchi vengono ignorati se l'alfa è impostato su 0,0.

Si consiglia di controllare quanto sopra.

+0

Grazie pete .. L'avevo già recensito e ho impostato la proprietà abilitata per il pulsante su yes ma non funziona .. hmmm .. ho ragione usando questo codice: [[tableView cellForRowAtIndexPath: indexPath] insertSubview: subSelectionView aboveSubview: self.view ] ;? – Aldee

+0

Se è possibile vedere la sottoview, allora sì - il problema è che non riceve eventi. –

5

Si potrebbe inserire questo visualizzazione secondaria superiore nella pila vista. Questo può essere fatto facilmente in Interface Builder.

enter image description here

Qui Label - files è posto ontop di Table View - all files. Non è quello che vuoi?

+0

grazie srikar, ma l'etichetta è generato da codice non in IB ... – Aldee

47

C'è un metodo bringSubViewToFront dell'istanza di UIView. Puoi usare quel metodo.

ad es.

UIVIew *yourSubView; 
[yourMainView addSubView:yourSubView]; 
[yourMainView bringSubviewToFront:yourSubView]; 

EDIT

nel tuo caso dovrebbe essere come,

[[tableView cellForRowAtIndexPath:indexPath] insertSubview:subSelectionView aboveSubview:self.view]; 
[[tableView cellForRowAtIndexPath:indexPath] bringSubviewToFront:subSelectionView]; 
+0

grazie Jennis, ma ancora non funziona per me ... – Aldee

+0

Can voi per favore pubblica il tuo codice sorgente completo come crei la sottoview e aggiungi? –

+0

vedere l'ultima parte .. grazie .. – Aldee

4

Uso - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index funzione del UIView insieme ai NSArray di subviews che si ottiene da subviews di UIView proprietà ...

+0

posso avere qualche campione Jhaliya? grazie .. – Aldee

5
[tableView bringSubviewToFront:subSelectionView]; 

o se il lavoro don`t provare

[viewController.view bringSubviewToFront:subSelectionView]; 
+0

grazie moonkid, ancora non funziona .. Sono ancora a fuoco con la vista posteriore .. hmm .. se userò insertViewAtIndex: metodo, qual è il livello più in alto? è il più grande numero/valore o il più basso? – Aldee

+0

È possibile ottenere la visualizzazione più in alto utilizzando l'oggetto finestra Finestra * window = [[[UIApplication sharedApplication] windows] objectAtIndex: 0]; Than UIView * topView = [[sottoview delle finestre] lastObject]; – Moonkid

0

In Swift si può fare questo:

self.view.bringSubview(toFront: theViewToMoveToFront) 
Problemi correlati