2012-01-31 25 views
13

Czy ktoś może mi pomóc, jak sprawić, aby UIView został stworzony w kodzie, aby był na szczycie wszystkich innych widoków? gdzie tableView jest widokiem nadrzędnym, a subSelectionView jest moim niestandardowym widokiem rodzeństwa, chcę zrobić to na wierzchu tabeliView .. Mam ten kod poniżej:Umieść UIView na górze wszystkich innych widoków.

To jest pełny kod źródłowy dla mojej didSelectRowAtIndexPath :, skąd programowo dodać instancję 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]; 

} 

ale nie działa ..

Poniższa grafika przedstawia moją subSelectionView, przycisk jest w nim i subSelectionView jest w tableview. Teraz, gdy kliknąłem ten przycisk, problem polega na tym, że nie mogę go kliknąć. Skupia się bezpośrednio na tableView nawet przy obecności moich kodów. Czy ktoś może mi pomóc proszę? ....

enter image description here

Odpowiedz

6

Jeśli czytam swoje pytanie prawy problem jest to, że nie można rzeczywiście dotknij przycisk w nowym widoku, który jest na górze tableview?

A kiedy go dotkniesz, odpowiada UITableView poniżej?

Oznacza to, że UIButton nie rozpoznaje, że jest stuknięty, a zdarzenie przechodzi do następnego podglądu poniżej, który ma zostać przetworzony.

Teraz istnieje wiele możliwych przyczyn takiego zachowania - możesz mieć interakcji użytkownika wyłączone dla niego lub UIView, to może to Włączone właściwość ustawiona na NO lub może być poza więzami UIView (iOS automatycznie zakłada, że ​​jeśli dotknięcie znajduje się poza prostokącie obwiedni, straciło odbiornik).

Ponadto, zawory są ignorowane jeśli alfa jest ustawiony na 0.0.

Powinieneś sprawdzić wszystkie powyższe.

+0

Dzięki pete .. ja już przeglądowi i ustawić przycisk umożliwiło właściwość tak, ale nadal nie działa .. hmmm .. mam rację przy użyciu tego kodu: [[tableView cellForRowAtIndexPath: indexPath] insertSubview: subSelectionView aboveSubview: self.view ] ;? – Aldee

+0

Jeśli widzisz podgląd, to tak - problem polega na tym, że nie otrzymuje on zdarzeń. –

5

Można umieścić ten subview wyższa w widoku stosu. Można to łatwo zrobić w narzędziu do tworzenia interfejsu.

enter image description here

Tutaj Label - files umieszcza ontop Table View - all files. Czy tego nie chcesz?

+0

dzięki srikar, ale etykieta jest generowany przez kod nie w IB ... – Aldee

47

Istnieje metoda bringSubViewToFront instancji UIView. Możesz użyć tej metody.

np.

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

EDIT

w twoim przypadku powinien on być podobny,

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

dzięki Jennis, ale nadal nie działa dla mnie ... – Aldee

+0

Można proszę napisać swój pełny kod źródłowy, jak utworzyć subview i dodać? –

+0

zobacz ostatnią część .. dzięki .. – Aldee

4

Zastosowanie - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index funkcją UIView wraz z NSArray z subviews które można uzyskać z UIView za subviews właściwość ...

+0

Czy mogę prosić o próbkę Jhaliya? dzięki .. – Aldee

5
[tableView bringSubviewToFront:subSelectionView]; 

czy pracy Don`t spróbować

[viewController.view bringSubviewToFront:subSelectionView]; 
+0

dzięki moonkid, nadal nie działa .. Nadal jestem w centrum uwagi z widokiem z tyłu .. hmm .. czy będę używać metody insertViewAtIndex: jaka jest najwyższa warstwa? czy jest to największa liczba/wartość lub najniższa? – Aldee

+0

Możesz uzyskać najwyższy widok za pomocą obiektu window Window * window = [[[UIApplication sharedApplication] windows] objectAtIndex: 0]; Niż UIView * topView = [[widoki okna] lastObject]; – Moonkid

0

w Swift można to zrobić:

self.view.bringSubview(toFront: theViewToMoveToFront) 
Powiązane problemy