2010-05-17 10 views
7

मेरे पास एक स्प्लिट व्यू कंट्रोलर है, जिसमें बाईं ओर एक टेबल व्यू कंट्रोलर होता है। जब मैं टेबल सेल के विस्तार प्रकटीकरण बटन पर क्लिक करता हूं तो मैं पॉपओवर के अंदर एक एक्शन शीट कैसे दिखा सकता हूं?पॉपओवर के अंदर एक एक्शन शीट कैसे दिखाना है?

उत्तर

15

इस प्रयास करें:

UIActionSheet *popupSheet = [[UIActionSheet alloc] initWithTitle:@"Title" 
                 delegate:self 
               cancelButtonTitle:@"Cancel" 
              destructiveButtonTitle:@"No Way !" 
               otherButtonTitles:nil]; 

popupSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
UIButton * disclosureButton = (UIButton *)cell.accessoryView; 

[popupSheet showFromRect:disclosureButton.bounds inView:cell.accessoryView animated:YES]; 
[popupSheet release]; 

UIActionSheet docs राज्य कि showFromRect:inView:animated: विधि: एक पॉपओवर जिसका तीर अंक देखने की निर्दिष्ट आयत में

प्रदर्शित करता है कार्रवाई शीट (हमारे मामले में विस्तार प्रकटीकरण बटन)। पॉपओवर निर्दिष्ट आयत को ओवरलैप नहीं करता है।

0

मैं और अधिक उन्नत उपयोग के लिए इस का उपयोग करें:

  1. कस्टम accesoryView (cell.accesoryView)
  2. खाली है, पाता है खोजने के उत्पन्न accesoryView (UIButton) यदि सेल
  3. यदि है UIButton मौजूद नहीं है, सेल कॉन्टेट व्यू (UITableViewCellContentView)
  4. यदि सेल कॉन्टेट व्यू मौजूद नहीं है, तो सेल व्यू
  5. का उपयोग करें

UIActionSheet या UIPopoverController के लिए उपयोग किया जा सकता है।

UIView *accessoryView  = cell.accessoryView; // finds custom accesoryView (cell.accesoryView) 
if (accessoryView == nil) { 
    UIView *cellContentView = nil; 

    for (UIView *accView in [cell subviews]) { 
     if ([accView isKindOfClass:[UIButton class]]) { 
      accessoryView = accView; // find generated accesoryView (UIButton) 
      break; 
     } else if ([accView isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) { 
      // find generated UITableViewCellContentView     
      cellContentView = accView; 
     } 
    } 
    // if the UIButton doesn't exists, find cell contet view (UITableViewCellContentView)   
    if (accessoryView == nil) { 
     accessoryView = cellContentView; 
    } 
    // if the cell contet view doesn't exists, use cell view 
    if (accessoryView == nil) { 
     accessoryView = cell; 
    } 
} 

[actionSheet showFromRect:**accessoryView.bounds** inView:**accessoryView** animated:YES]; 

5,1

कस्टम विधि के रूप में उपयोग करने के लिए सबसे अच्छा करने के लिए आईओएस 4.3 में परीक्षण किया गया:

यहाँ मेरी कोड है

-(UIView*)getViewForSheetAndPopUp:(UITableViewCell*)cell; 

और विधि कोड:

-(UIView*)getViewForSheetAndPopUp:(UITableViewCell*)cell { 
UIView *accessoryView = cell.accessoryView; 

if (accessoryView == nil) { 
    UIView *cellContentView = nil; 

    for (UIView *accView in [cell subviews]) { 
     if ([accView isKindOfClass:[UIButton class]]) { 
      accessoryView = accView; 
      break; 
     } else if ([accView isKindOfClass:NSClassFromString(@"UITableViewCellContentView")]) {    
      cellContentView = accView; 
     } 
    }  

    if (accessoryView == nil) { 
     accessoryView = cellContentView; 
    } 
    if (accessoryView == nil) { 
     accessoryView = cell; 
    } 
} 

return accessoryView; 
} 
संबंधित मुद्दे