2012-01-11 17 views
10

मैं ऐप प्रतिनिधि के दृश्य से एक मोडल व्यू कंट्रोलर कैसे पेश कर सकता हूं, सबसे ज्यादा? UIView से एक मोडल व्यू कंट्रोलर पेश करने का प्रयास कर रहा है, जिसने मुझे उलझन में डाल दिया।ऐप प्रतिनिधि से वर्तमान मॉड्यूल व्यू कंट्रोलर

उत्तर

6

आवेदन प्रतिनिधि एक दृश्य का प्रबंधन नहीं करते हैं। आपको -application:didFinishLaunchingWithOptions: में स्क्रीन पर रखे गए पहले दृश्य नियंत्रक की -viewDidAppear: विधि से एक मोडल व्यू कंट्रोलर प्रस्तुत करना चाहिए।

+0

मैं वास्तव में, किसी भी विचार एक UIView से एक modalViewController पेश करने के लिए कोशिश कर रहा हूँ, और शीर्ष सबसे ViewController पर इस पेश करने के लिए कोशिश कर रहा है? – adit

+1

मॉडल दृश्य नियंत्रक केवल अन्य दृश्य नियंत्रकों द्वारा प्रस्तुत किए जा सकते हैं। उनके द्वारा प्रबंधित विचारों को अपने स्वयं के नियंत्रक का कोई ज्ञान नहीं है, अन्य दृश्य नियंत्रकों को अकेले छोड़ दें। –

+0

हालांकि यह उत्तर ओपी की कुछ गलतफहमी को इंगित करता है, लेकिन यह वास्तव में प्रश्न का उत्तर नहीं देता है। कृपया मेरा उत्तर पुनः देखें: UIWindow – Steve

11

अपने rootViewController का उपयोग करें। आप किसी भी व्यू कंट्रोलर सबक्लास से एक मोडल व्यू कंट्रोलर पेश कर सकते हैं। अपने जड़ कुलपति एक UITabBarController है, तो आप कर सकते हैं:

[self.tabBarController presentModalViewControllerAnimated:YES] 

या अगर इसकी एक नेविगेशन नियंत्रक:

[self.navigationController presentModalViewControllerAnimated:YES] 

आदि

संपादित करें: MVC

तक एक दृश्य के भीतर से एक नियंत्रक पेश करने की कोशिश कर आप एमवीसी पैटर्न तोड़ रहे हैं। आम तौर पर, एक दृश्य इसकी उपस्थिति से संबंधित है और इंटरफेस को उजागर करने के लिए यूजर इंटरफेस राज्य को इसके नियंत्रक को संवाद करने के लिए है। उदाहरण के लिए, यदि आपके पास अपने दृश्य में UIButton है और आप इसे एक मोडल व्यू कंट्रोलर प्रस्तुत करना चाहते हैं, तो आप इसे करने के लिए दृश्य को कठोर तार नहीं देते हैं। इसके बजाए, जब नियंत्रक दृश्य को तुरंत चालू करता है, तो नियंत्रक touchUpInside क्रिया प्राप्त करने के लिए स्वयं को लक्ष्य के रूप में सेट करके बटन को कॉन्फ़िगर करता है जहां यह उपयुक्त मोडल व्यू नियंत्रक प्रस्तुत कर सकता है।

दृश्य स्वयं को (और नहीं होना चाहिए) इस प्रासंगिक ज्ञान को नियंत्रक के काम को करने के लिए नहीं करता है।

+2

काम नहीं करता है अगर 'rootViewController' पहले से ही एक मोडल व्यू कंट्रोलर पेश कर रहा है। – Steve

+0

सच है, यह सिर्फ एक उदाहरण था। मुझे ओपी के ऐप का पूरा तर्क नहीं पता है। उन सभी के साथ भी सहमत हैं जो उचित तकनीकों को बेहतर समझते हैं ताकि जब आप आवश्यक हो तो आप जो कर रहे हैं उसके पूर्ण ज्ञान से विचलित हो जाएं। – XJones

+0

एक 'UIWindow'- आधारित दृष्टिकोण बोर्ड पर, हमेशा कस्टम तर्क के साथ काम करता है ... बस' UIAlertView' की तरह काम करता है। – Steve

10

ऐसा करने का सबसे अच्छा तरीका एक नया UIWindow बनाना है, इसे windowLevel संपत्ति सेट करें, और उस विंडो में अपना UIViewController प्रस्तुत करें।

यह UIAlertView का काम है।

इंटरफ़ेस

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 

@property (nonatomic, strong) UIWindow * alertWindow; 

... 

- (void)presentCustomAlert; 

@end 

कार्यान्वयन:

@implementation MyAppDelegate 

@synthesize alertWindow = _alertWindow; 

... 

- (void)presentCustomAlert 
{ 
    if (self.alertWindow == nil) 
    { 
     CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
     UIWindow * alertWindow = [[UIWindow alloc] initWithFrame:screenBounds]; 
     alertWindow.windowLevel = UIWindowLevelAlert; 
    } 

    SomeViewController * myAlert = [[SomeViewController alloc] init]; 
    alertWindow.rootViewController = myAlert; 

    [alertWindow makeKeyAndVisible]; 
} 

@end 
+0

एक आकर्षण की तरह काम करता है। –

+0

शानदार सहायक उत्तर – Fattie

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