2012-06-26 14 views
5

ठीक है, आप में से कुछ के लिए यह सवाल हास्यास्पद लगता है लेकिन मैं अपने साथियों के साथ आईओएस ऐप के डिजाइन के बारे में चर्चा कर रहा हूं और मुझे इसके बारे में आपकी राय चाहिए।क्या हमें दो दृश्यों के बीच पुश सेग्यू लूप से बचना चाहिए?

पुराने डिज़ाइन जो मैं असहमत के रूप में

  • हम ViewControllerA जो बटन शामिल है निम्नलिखित "बी करने के लिए जाओ" है। बटन एक धक्का segue है बी में जाने के लिए
  • हम ViewControllerB जो व्याप्ति बटन एक धक्का segue है हम 2 ViewController एक के बीच जाने की जरूरत ए
  • पर जाने के लिए "एक करने के लिए जाओ" बटन शामिल है बहुत।

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

डिजाइन में पुश सेगु लूप कितना गंभीर है? क्या यह कुछ मामलों में स्वीकार्य है? मैं कहां से सेब की सिफारिश अच्छे डिजाइन देख सकते हैं

संपादित करें (यदि कोई हैं?): मैं कोशिश "पॉप धक्का से पहले" समाधान nfarshchi द्वारा लेकिन ऐसा नहीं work.This करना है मैं कैसे किया: 1) मैं वीसी ए से वीसी बी और सीसी बी से वीसी ए तक एक ही समय में सीगू नहीं बना सकता। ऐसा लगता है कि स्टोरीबोर्ड इसे 2 होने से रोकता है 2) इस प्रकार मैं एक सेगू बनाता हूं जिसका पहचानकर्ता वीसी ए से वीसी बी में बटन "गो टू बी" बटन से "गेटोबी" है और एक सीग्यू जिसका पहचानकर्ता बटन से "गोटोओ" है "ए टू गो "कुलपति ए के लिए कुलपति बी में

तो स्टोरीबोर्ड होगा इस तरह दिखता है:

कुलपति एक्स --- पुश ---> कुलपति एक < ---- पुश ----> कुलपति बी (कारण मैं ViewController एक्स की जरूरत बाद में समझाया गया है) 3) कुलपति ऐ में यह है:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"Prepage for segue go to B") ; 
    if ([[segue identifier] isEqualToString:@"gotoB"]) { 
     [self.navigationController popViewControllerAnimated:NO]; 

    } 
} 

मैं कुलपति एक्स जरूरत है क्योंकि मैं नहीं कर सकता यदि वहां केवल एक व्यू कंट्रोलर है तो स्टैक से व्यू कंट्रोलर पॉप करें।

अब यह सही लगता है, लेकिन जब मैंने "बी टू गो" पर क्लिक किया, तो यह इसके बजाय वीसी एक्स पर गया। यह स्पष्ट रूप से था कि उपर्युक्त पॉपव्यू कंट्रोलरएनिएटेड: वीसी ए पॉप किया गया है, और यह सब कुछ है, वीसी बी के लिए सीगू अब निकाल दिया गया था। नतीजा यह था कि वीसी बी को स्टैक में धक्का नहीं दिया गया था।

इस प्रकार मुझे लगता है कि यह nfarshchi के समाधान को लागू करने के अव्यावहारिक है

उत्तर

3

आप ऐसा विचार कर सकते हैं, लेकिन जब आप एक UIViewController बाहर धक्का और फिर आप में धक्का इसे फिर से डिजाइन करने के तरीकों का एक बहुत कॉल करेंगे। यदि आप उन पर आगे बढ़ना चाहते हैं तो UINavigationController का उपयोग करना बेहतर है। इस मामले में आप केवल उन्हें एक बार बनाते हैं और आप आसानी से उनके बीच नेविगेट कर सकते हैं। यह कम सिस्टम संसाधनों का उपयोग करेगा

+0

धन्यवाद। लेकिन मुझे नहीं लगता कि "पुश से पहले पॉप" के बारे में आपका समाधान – grandagile

+1

काम करेगा, कोई मतलब नहीं, मेरा मतलब यह नहीं था कि आप धक्का देने से पहले पॉप करते हैं, मैं 'UINavigationController' का उपयोग करके कह रहा था, आप केवल एक बार अपने 'UIViewController' को दबा सकते हैं और आप भी कर सकते हैं एक साधारण बैक बटन है। और इसे फिर से पॉप करने की कोई ज़रूरत नहीं है। 'UINavigationController' आपके लिए ऐसा करेगा। – nfarshchi

+0

मान लें कि आपके पास 'ViewControllerA' और' ViewControllerB' है। 'ए' पर आपके पास एक बटन हो सकता है और [self.navigationController pushViewController: viewControllerB एनिमेटेड: हाँ]; – nfarshchi

1

पुश/पॉप संक्रमण केवल तभी उपयोग किया जाना चाहिए जब संक्रमण बनाता है वर्चुअल 2 डी स्पेस यथार्थवादी है। यदि उपयोगकर्ता एक पंक्ति में 10 पुश संक्रमण देखता है, तो ऐसा लगता है कि वे एक पदानुक्रम में गहरे और गहरे जा रहे हैं और यह भ्रम और खराब मानसिक मॉडल का कारण बन सकता है, खासकर यदि वास्तविकता में आप केवल दो दृश्य नियंत्रकों के बीच आगे बढ़ रहे हैं।

बैक बटन का उपयोग करना एक बेहतर समाधान होगा, या आप अपना खुद का कस्टम संक्रमण कर सकते हैं जो उपयोगकर्ता को यह स्पष्ट करता है कि क्या हो रहा है। शायद एक फ्लिपसाइड संक्रमण भी उपयुक्त होगा।

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