2012-01-25 11 views
6

मैं एक स्टोरीबोर्ड के रूप में एक आईबुक-जैसे फ्लिप संक्रमण को लागू करने की कोशिश कर रहा हूं। सीगू को राहत देना चाहिए। UINavigationControllers ढेर पर/से destinationViewController पॉप करें।कस्टम सेगु पुशिंग/पॉपिंग UIViewControllers

मैं अपने segues perform विधि में व्यू कंट्रोलर को धक्का दे सकता हूं लेकिन मैं पॉप नहीं कर पा रहा हूं। जब मैं अपनी फ्लिप एनीमेशन बनाने के बाद नियंत्रक को सही करता हूं तो एनीमेशन नहीं चलता है और इसकी कॉलबैक - जो [[UIApplication sharedApplication] endIgnoringInteractionEvents] को कभी नहीं बुलाया जाना चाहिए और मेरे ऐप के परिणाम मर गए हैं।

इसलिए मैंने animationDidStop:anim:flag प्रतिनिधि विधि में धक्का/पॉप करने की कोशिश की लेकिन इसे ध्वज सेट के साथ कभी भी सही नहीं कहा जाता है।

मुझे लगता है कि प्रतिनिधि विधि को कॉल करने से पहले segue को हटा दिया गया है। इसके अलावा मेरे द्वारा और क्या किया जा सकता है?

+0

यदि आप स्टोरीबोर्ड का उपयोग कर रहे हैं तो आपको आईओएस 5 का उपयोग करना होगा। 'UIPageViewController' का उपयोग क्यों न करें? यह आपके द्वारा iBooks देखने वाले सभी मानक पृष्ठ फ़्लिप व्यवहार को लागू करता है। –

+1

मैं पेजकर्ल के बारे में बात नहीं कर रहा हूं लेकिन आईबुक्स बुकशेल्फ़ से स्टोर और पीछे की ओर फ्लिप के बारे में बात नहीं कर रहा हूं। – cschuff

+0

असल में, आप दो व्यू कंट्रोलर चाहते हैं जो "बैक-टू-बैक" दिखाई देते हैं, ताकि आप दोनों एक ही स्थान के भीतर इच्छानुसार, दोनों के बीच फ्लिप कर सकें, बनाम एक स्टैक पर हो रहा है जिसके साथ प्राथमिकता हो रही है अन्य, हाँ? मैं इसे 100% सुनिश्चित होने तक उत्तर के रूप में पोस्ट नहीं करूंगा, लेकिन मुझे आश्चर्य है कि इसके बजाय भ्रम प्रदान करना सबसे अच्छा होगा (इसलिए मान लीजिए कि आपके पास टेबल व्यू और मैप व्यू है। एक प्राथमिक बनाएं, एक फ्लिप के साथ माध्यमिक के लिए segue, और रिवर्स फ्लिप प्रति बैक "वापस" हो। इसे बाहर करने की कोशिश करनी होगी ...) –

उत्तर

5

मुझे माफ़ कर दो अगर मैं इस प्रश्न को पूरी तरह से गलत समझ रहा हूं, लेकिन ऐसा लगता है कि आप दो दृश्य नियंत्रकों के बीच एक मूल क्षैतिज फ्लिप करना चाहते हैं। और यहां तक ​​कि अगर आप इसे पहले से ही समझ चुके हैं, तो शायद यह किसी और की मदद करेगा जिस पर एक ही प्रश्न है।

(1) आपके स्टोरीबोर्ड में (जिसमें व्यू कंट्रोलर ए & बी) ए से बी के लिए मॉडल सेग्यू बनाएं। इसे पहचानकर्ता (शोव्यू कंट्रोलर बी) दें और संक्रमण चुनें: क्षैतिज फ्लिप करें।

(2 ए) ViewControllerB.h में @interface ऊपर जोड़ें::

:

@class ViewControllerB; 

@protocol ViewControllerBDelegate 
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller; 
@end 

(2 बी) एक संपत्ति के रूप में प्रतिनिधि जोड़े

हम प्रोटोकॉल और प्रतिनिधियों की स्थापना

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate; 

(3 ए) ViewControllerB.m संश्लेषण में:

@synthesize delegate; 

(3 बी) और प्रतिनिधि विधि में वापस फ्लिप करने:

- (IBAction)flipBack:(id)sender 
{ 
    [self.delegate viewControllerBDidFinish:self]; 
} 

(4) ViewControllerA.h में बहुत ऊपर #import "ViewControllerB.h" पर और @interface <ViewControllerBDelegate>

(5 ए के अंत पर जोड़ने

- (void)viewControllerBDidFinish:(ViewControllerB *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

(5 ब) तो यह prepareForSegue में प्रतिनिधि के रूप में सेट करें::) ViewControllerA.m में प्रोटोकॉल के अनुरूप विधि जोड़ने

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) { 
     [[segue destinationViewController] setDelegate:self]; 
    } 
} 

मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा। अगर मुझे गलत समझा जाता है, तो बस मुझे बताएं।

0

आपका प्रश्न थोड़ा उलझन में पॉप, पुश, फ्लिप और बैकफ्लिप के रूप में थोड़ा उलझन में है। मुझे यकीन नहीं है कि क्या एआई आपके प्रश्न का उत्तर दे सकता है, लेकिन मैं बता सकता हूं कि मैंने क्या किया।

यदि मैं नेविगेशन नियंत्रक स्टैक में दृश्य नियंत्रक को धक्का देता हूं और स्टोरीबोर्ड सेगु स्टाइल को पुश पर सेट करता है, तो उसे दाएं से बाएं दृश्य में धकेल दिया जाएगा। बैक बटन दिखाई देता है और इसमें प्रस्तुत करने वाले व्यू कंट्रोलर का शीर्षक दिखाता है।

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

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

: presentedViewController में मैं के साथ दृश्य को खारिज।

लेकिन यह गंदा समाधान है और इसे सेब द्वारा अनुशंसित नहीं किया जाता है।

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

ल्यूक Dubert आपको एक उदाहरण कैसे प्रतिनिधि लागू करने के लिए दे दिया।

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