2011-10-16 11 views
20

पर बटन बनाना संभव नहीं हो सकता है, लेकिन मुझे आशा है कि किसी को यह पता चल जाएगा कि इसे कैसे किया जाए।पॉपओवर व्यू एंकर के लिए रन टाइम

मेरे पास एक ऐप है जो मैं आईफोन से केवल सार्वभौमिक में पोर्ट कर रहा हूं। आईफोन पर, मैं एक टैब्ड एप्लिकेशन का उपयोग कर रहा हूं। मैं सामान्य डेटा को प्रदर्शित करने के लिए तीन टैब का उपयोग करता हूं। मेरे पास एक आगे टैब है जो केवल तभी प्रदर्शित होता है जब कुछ शर्तों को पूरा किया जाता है। टैब जोड़ने के लिए, मुझे क्या करना:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
{ 
    UITabBarController *tabController = (UITabBarController *) self.rootViewController; 
    NSMutableArray* newArray = [NSMutableArray arrayWithArray: tabController.viewControllers]; 
    [newArray addObject: [theStoryboard instantiateViewControllerWithIdentifier: @"AdditionalView-Phone"]]; 
    [tabController setViewControllers:newArray animated:YES]; 
} 

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

UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] initWithTitle: @"Modem" style: UIBarButtonItemStylePlain target: self action: @selector(togglePopover:)]; 
self.navBar.topItem.rightBarButtonItem = flipButton; 

लेकिन मैं एक अपवाद प्राप्त: 'NSInternalInconsistencyException', कारण: '। UIStoryboardPopoverSegue एक बार बटन आइटम या किसी दृश्य से प्रस्तुत किया जाना चाहिए' मुझे यकीन है कि ऐसा इसलिए है क्योंकि मेरे पास पॉपओवर सेग्यू के लिए एंकर सेट नहीं है। बटन स्टोरीबोर्ड में मौजूद नहीं है, इसलिए मैं इसे वहां सेट नहीं कर सकता। और मुझे इसे चलाने के लिए इसे चलाने के लिए एक एपीआई नहीं मिल रहा है।

मैंने आईबी में बटन बनाने का भी प्रयास किया, लेकिन दृश्य पदानुक्रम में नहीं, और फिर बस मेरे मौजूदा बटन पर सहीबैरटन इटैम संपत्ति सेट कर रहा है। यह भी काम करता है, लेकिन मैं अभी भी उस बटन को पॉपओवर व्यू के लिए एंकर के रूप में सेट नहीं कर सकता। मैं नेविगेशन बार को एंकर के रूप में सेट कर सकता हूं, लेकिन यह नेविगेशन बार में शीर्षक के लिए लंगर बनाता है, जो मूर्खतापूर्ण दिखता है।

कोई विचार?

+0

अरे @Flyingdiver क्या आपको इसका समाधान मिला? – Rog

+0

हां, एक छिपी हुई UIView बनाएं जिससे पॉपओवर पेश किया जाए और जहां कहीं भी आपको आवश्यकता हो। –

उत्तर

13

मुझे वही समस्या थी और दृश्य नियंत्रक के लिए स्टोरीबोर्ड में UIBarButtonItem बनाकर इसे हल किया गया था, लेकिन दृश्य पदानुक्रम का हिस्सा नहीं था।

आईबी में, व्यू कंट्रोलर व्यू के नीचे एक बार बटन आइटम को अंधेरे बार में खींचें, इसे "फर्स्ट रेस्पॉन्डर" और "कंट्रोलर देखें" आइकन के बगल में छोड़ दें। इसके लिए एक (मजबूत) आईबीओलेट बनाएं। फिर बार बटन आइटम से गंतव्य तक खींचकर गंतव्य दृश्य नियंत्रक से पॉपओवर सेगू बनाएं। ऐसा लगता है कि यह एंकर के रूप में सेट करने का एकमात्र तरीका है। मौजूदा सिगू के लिए एंकर के रूप में इसे चुनना काम नहीं करता है (आईबी बग की तरह दिखता है)।

enter image description here

viewDidLoad में आप (कभी आप की तरह या जहां) navigationItem को यह बार बटन आइटम प्रदान कर सकते हैं और segue अपेक्षा के अनुरूप काम करता है।

3

मैं इसके बारे में उत्सुक था इसलिए मैंने एक त्वरित परीक्षण परियोजना बनाई। आप सही हैं, रनटाइम पर पॉपओवर सेग्यू को कॉन्फ़िगर करने या इंटरफ़ेस बिल्डर का उपयोग करके दृश्य पदानुक्रम में नहीं होने वाले बटन पर एंकर पॉइंट जोड़ें।

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = nil; 
} 

तो मैं बस इसे वापस जोड़ सकते हैं या इसे हटाने:

मेरे समाधान UIBarButtonItem दिखाई और एक IBOutlet संपत्ति से जुड़ा के साथ आईबी में सब कुछ सेट अप करने के लिए है, तो -viewDidLoad में नेविगेशन पट्टी से हटाने था एक और बटन को टैप करके:

- (IBAction)toggleBarButtonItem:(id)sender 
{ 
    UIBarButtonItem *item = (self.navigationItem.rightBarButtonItem == nil) ? self.popoverBarButtonItem : nil; 
    [self.navigationItem setRightBarButtonItem:item animated:YES]; 
} 

आप सशर्त रखने या उसी तरह -viewDidLoad में बटन को निकालने सकता है। Segue UIBarButtonItem के लिए लगा हुआ है।

2

मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन यह वही है जो मैं करूँगा। एक बटन बनाएं और इसे कुछ लक्ष्य/क्रिया के साथ सेट करें। कि लक्ष्य/कार्रवाई विधि

presentPopover:(UIButton *)sender; 
फिर presentPopover विधि में

कॉल, कहते हैं कि

UIViewController *customAdditionalViewController = [[MySpecialVC alloc] init]; 
//Configure the customAdditionalViewController 
//Present the customAdditionalViewController in a Popover 
UIPopoverController *popover = [[UIPopoverController alloc] initWithViewController:customAdditionalViewController]; 
//Set popover configurations 
[popover presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:/*whatever you want*/ animated:YES]; 

है कि कैसे मैं आपके उपयोग के मामले को संभाल होगा।

3

मैं वाला एक डमी दृश्य आकार और विचारों मैं से, तार पॉपओवर पेश करने के लिए है कि segue पॉपओवर लक्षित करने के लिए और उसके बाद दृश्य सही स्थिति के लिए prepareForSegue:sender:

में ले जाना चाहते हैं के आकार है कि बनाने का प्रयास करें
+0

यह काम करता है! छुपा हुआ डमी दृश्य होने से समस्याएं उत्पन्न नहीं होती हैं। –

संबंधित मुद्दे