2012-01-31 12 views
13

क्या कोई मुझे अन्य सभी दृश्यों के शीर्ष पर कोड में बनाए गए UIView को बनाने में मदद कर सकता है? जहां tableView मूल दृश्य है और subSelectionView मेरा कस्टम भाई बहन है, मैं इसे तालिका के शीर्ष पर बनाना चाहता हूं .. मेरे पास यह कोड नीचे है:अन्य सभी विचारों के शीर्ष पर UIView रखें

यह मेरे किया गया चयन करने के लिए पूर्ण स्रोत कोड है IeelectRowAtIndexPath :, कहां से मैं प्रोग्राम के रूप में 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]; 

} 

लेकिन काम नहीं करता है ..

नीचे दी गई छवि मेरी subSelectionView पता चलता है, बटन यह भीतर है और subSelectionView tableView के भीतर है। अब, जब मैंने उस बटन पर क्लिक किया, तो समस्या यह है कि मैं वास्तव में इसे क्लिक नहीं कर सकता। यह सीधे मेरे टेबल की उपस्थिति के साथ तालिका पर ध्यान केंद्रित करता है। कोई मेरी मदद कर सकते हैं? ....

enter image description here

उत्तर

6

अगर मैं अपने प्रश्न को पढ़ने का अधिकार अपने समस्या यह है कि आप वास्तव में tableview के शीर्ष पर है कि अपने नए दृश्य में बटन पर टैप नहीं कर सकता है?

और जब आप इसे टैप करते हैं, तो UITableView नीचे जवाब देता है?

इसका मतलब है कि यूआईबटन को यह नहीं पता है कि यह टैप किया गया है, और घटना संसाधित होने के लिए नीचे दिए गए अगले सबव्यू में जाती है।

अब, वहाँ इस तरह के व्यवहार के लिए कई संभावित कारण हैं - आप हो सकता है उपयोगकर्ता संपर्क इसके लिए अक्षम या UIView, यह नहीं पर सेट कर सकते हैं सक्षम संपत्ति या यह UIView के बंधन से परे हो सकता है (आईओएस स्वचालित रूप से मानता है कि यदि एक टैप सीमा आयत के बाहर है तो यह रिसीवर से चूक गया)।

इसके अलावा, यदि आपका अल्फा 0.0 पर सेट किया गया है तो टैप को अनदेखा कर दिया जाता है।

आपको उपर्युक्त सभी की जांच करनी चाहिए।

+0

धन्यवाद पेटी .. मैंने पहले ही इसकी समीक्षा की है और बटन सक्षम प्रॉपर्टी को हां में सेट किया है लेकिन अभी भी काम नहीं करता है .. हमम .. क्या मैं इस कोड का उपयोग कर रहा हूं: [[tableView cellForRowAtIndexPath: indexPath] insertSubview: subSelectionView उपरोक्त दृश्य: self.view ] ;? – Aldee

+0

यदि आप सबव्यूव देख सकते हैं, तो हाँ - समस्या यह है कि यह ईवेंट प्राप्त नहीं करता है। –

5

आप दृश्य ढेर में इस subview उच्च लगा सके। यह आसानी से इंटरफ़ेस बिल्डर में किया जा सकता है।

enter image description here

यहाँ Label - filesTable View - all files के ontop रखा गया है। क्या आप वह नहीं चाहते हैं?

+0

धन्यवाद Srikar, लेकिन लेबल कोड से उत्पन्न होता है नहीं आईबी में ... – Aldee

47

UIView इंस्टेंस के एक विधि लाने के लिए SubViewToFront है। आप उस विधि का उपयोग कर सकते हैं।

उदा।

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

संपादित

अपने मामले में यह की तरह होना चाहिए में

, NSArray की subviews जो आप UIView के subviews से प्राप्त के साथ UIView की

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

धन्यवाद jennis, लेकिन अभी भी मेरे लिए काम नहीं करता है ... – Aldee

+0

आप कर सकते हैं कृपया अपना पूरा स्रोत कोड पोस्ट करें, आप सबव्यू कैसे बनाते हैं और जोड़ते हैं? –

+0

कृपया अंतिम भाग देखें .. धन्यवाद .. – Aldee

4

उपयोग - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index समारोह संपत्ति ...

+0

क्या मेरे पास कुछ नमूना झलिया हो सकता है? धन्यवाद .. – Aldee

5
[tableView bringSubviewToFront:subSelectionView]; 

या यदि डॉन `t काम कोशिश

[viewController.view bringSubviewToFront:subSelectionView]; 
+0

धन्यवाद चांदकिड, अभी भी काम नहीं करता है .. मैं अभी भी पीछे के दृश्य के साथ ध्यान केंद्रित कर रहा हूं .. हम्म .. अगर मैं insertViewAtIndex का उपयोग करूंगा: विधि, सबसे ऊपर की परत क्या है? क्या यह सबसे बड़ी संख्या/मूल्य या सबसे कम है? – Aldee

+0

आप विंडो ऑब्जेक्ट विंडो * विंडो = [[[यूआईएपीप्लिकेशन साझा अनुप्रयोग] विंडोज़ का उपयोग कर सबसे ऊपर दृश्य प्राप्त कर सकते हैं] objectAtIndex: 0]; UIView से * topView = [[विंडो सबव्यूज़] lastObject]; – Moonkid

0

स्विफ्ट में आप यह कर सकते हैं:

self.view.bringSubview(toFront: theViewToMoveToFront)