2011-10-06 20 views
7

मैं अपने आईपैड से UIActionSheet प्रदर्शित करने की कोशिश कर रहा हूं। यहाँ कोड है कि मैं का उपयोग कर रहा है:आईपैड UIActionSheet - अंतिम जोड़ा गया बटन प्रदर्शित नहीं किया गया

-(void) presentMenu { 
    UIActionSheet *popupMenu = [[UIActionSheet alloc] initWithTitle:@"Menu" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:nil]; 
    for (NSString *option in _menuItems) { 
     [popupMenu addButtonWithTitle:option]; 
    } 
    popupMenu.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
     [popupMenu showFromTabBar:_appDelegate.tabBar.tabBar]; 
    } 
    else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
     [popupMenu showFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES]; 
    } 
    [popupMenu release]; 
    return; 
} 

कार्यक्रम के iPhone संस्करण _menuItems में सभी बटन को प्रदर्शित करता है, लेकिन आईपैड संस्करण सिर्फ इतना है कि सरणी से पिछले आइटम पर ध्यान नहीं देता। क्या किसी को पता है कि यह क्यों हो रहा है?

धन्यवाद,
तेजा।

+0

कितने आइटम '_menuItems' में देखते हैं? – matsr

उत्तर

2

जैसे ही मैंने इस पोस्ट को टाइप किया, उत्तर मिला। किसी भी तरह से "रद्द करें" बटन को हटाकर दोनों बटन आते हैं। अजीब।

संपादित करें: हालांकि, यह वास्तव में परेशान है क्योंकि मेरे सभी बटन इंडेक्स आईफोन और आईपैड संस्करणों के बीच बदलते हैं (आईफोन को अभी भी रद्द बटन की आवश्यकता है)। इससे मैं कैसे निपटूं?

0

मुझे लगता है कि आईओएस क्या कर रहा है, यह आखिरी बटन को रद्द बटन होने की उम्मीद है (भले ही यह है या नहीं) और इसे हटा रहा है, लेकिन शायद केवल आईपैड के लिए। ऐसा शायद इसलिए है क्योंकि उपयोगकर्ता के बाहर इसे खारिज करने के लिए कार्रवाई शीट को टैप कर सकता है। ऐप्पल की डिज़ाइन पसंद के साथ मेरी समस्या यह है कि यह हमेशा स्पष्ट नहीं हो सकता है कि संवाद इस तरह से खारिज कर दिया जा सकता है या इसे हटाया जाना चाहिए।

उदाहरण के लिए, मैं [actionSheet showInView:self.view]; पर कॉल करके अपनी एक्शन शीट दिखा रहा हूं, यह पूरे दृश्य को डिवाइस के बीच में प्रदर्शित एक्शन शीट के साथ ग्रेड करने का कारण बनता है। उपयोगकर्ता जा रहे हैं - ठीक है, मेरी राय में - मान लीजिए कि उन्हें बटनों में से एक चुनना है।

मुझे लगता है कि अन्य एक्शन शीट डिस्प्ले मैकेनिज्म हैं - जैसे कि इसे बार बटन आइटम से जुड़े बबल के रूप में प्रदर्शित करता है - जहां एक रद्द बटन स्पष्ट रूप से अनावश्यक है। यह अच्छा होगा अगर ऐप्पल ने यहां अधिक लचीलापन की अनुमति दी। मेरे ऐप के लिए, मुझे शायद अपने कस्टम कन्स्ट्रक्टर में गुजरने वाले सरणी के अंत में एक डमी बटन जोड़ना होगा, यह जानकर कि आईओएस इसे छुपाएगा। यदि व्यवहार आईओएस की भावी रिलीज में बदलता है ... अच्छा, मुझे उस समय इसे संबोधित करना होगा।

अपने मामले में, मैं कन्स्ट्रक्टर का उपयोग न करने की अनुशंसा करता हूं जो कि बटन को हटाता है बटन और विनाशकारी बटनटन। इसके बजाय, उप-वर्ग UIActionSheet और उपरोक्त विधि का उपयोग कर मैन्युअल रूप से बटन जोड़ें। फिर, वांछित सूचकांक में रद्द करें बटन Index और विनाशकारी बटन Index सेट करें। याद रखें कि आप उन दो गुणों को सेट करने के लिए नहीं हैं; वे -1 (कोई बटन) के लिए डिफ़ॉल्ट। साथ ही, अपने बटन की स्थिति के बारे में एचआईजी का पालन करना याद रखें।

यहाँ मेरी उपवर्ग 'कंस्ट्रक्टर्स (संक्षिप्तता के लिए संपादित) में से एक, केवल आपके जानकारी देने के लिए है:

- (instancetype)initWithTitle:(NSString *)title 
       buttonTitles:(NSArray *)buttonTitles 
      cancelButtonIndex:(NSInteger)cancelButtonIndex 
     destructiveButtonIndex:(NSInteger)destructiveButtonIndex 
{ 
    self = [super initWithTitle:title delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

    if (self) 
    { 
     if (buttonTitles) 
     { 
      [buttonTitles enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
      { 
       [self addButtonWithTitle:obj]; 
      }]; 
     } 
     self.cancelButtonIndex = cancelButtonIndex; 
     self.destructiveButtonIndex = destructiveButtonIndex; 
     if (self.cancelButtonIndex > -1) 
     { 
      [self addButtonWithTitle:@""]; 
     } 
    } 

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