2012-10-19 10 views
7

UIViewController के रूप में एक वर्तमान दृश्य है जो "लॉग इन व्यू" कहता है लेकिन मैं अंदर नहीं हूं, मैं NSObject कक्षा में हूं और मैं कॉल करना चाहता हूं, एक अन्य UIViewController प्रदर्शित करें जिसे "मैप व्यू" कहते हैं। मैं यह कैसे कर सकता हूँ? enter image description hereएनएसओब्जेक्ट क्लास से UIViewController को कैसे प्रदर्शित करें?

समस्या ऊपर स्क्रीनशॉट की तरह है।

+1

दो चीजें: आप मॉडल के भीतर से दृश्य नियंत्रक को तुरंत चालू करने और प्रदर्शित करने का प्रयास क्यों कर रहे हैं, और [आपने क्या प्रयास किया है?] (Http://www.whathaveyoutried.com) –

+0

'AppDelegate * appDelegate = (AppDelegate *) [[यूआईपीप्लिकेशंस साझा अनुप्रयोग] प्रतिनिधि]; [[appDelegate loginViewController] presentViewController: mapViewController एनिमेटेड: हाँ पूर्णता: शून्य]; ' मैंने उस कोड को आजमाया लेकिन काम नहीं किया .. – Hayzum

+0

क्या आपके ऐपडिलेगेट क्लास का नाम वास्तव में" ऐपडिलेगेट "है? इसके अलावा, एनएसओब्जेक्ट से व्यू कंट्रोलर प्रस्तुत करने की आवश्यकता नहीं होनी चाहिए! –

उत्तर

2

आपको मॉडल के भीतर से दृश्य नियंत्रकों को तत्काल और प्रदर्शित नहीं करना चाहिए। दृश्य मॉडल द्वारा संचालित होना चाहिए।

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

LoginView के भीतर से

:

MapView *mapView = [[MapView alloc] init]; 

अपने अनुप्रयोग एक नेविगेशन नियंत्रक का उपयोग करता है:

[self.navigationController pushViewController:mapView animated:YES]; 

अन्यथा:

[self presentViewController:mapView animated:YES completion:<nil or block>]; 
5

आप अपने UIViewController का उपयोग करने की कोशिश कर रहे हैं मैं यह सोचते हैं हूँ एनएसओब्जेक्ट क्लास से UIViewController क्लास के सदस्य। बस UIViewController सदस्य को NSObject क्लास में पास करें। इस मामले में एक आत्म। जो आपको करने देता है वह है कि आप किसी भी वर्ग से अपने यूआईवी व्यू में जो कुछ भी करना चाहते हैं उसे बदल सकते हैं, संपादित कर सकते हैं, हटा सकते हैं। निम्नलिखित इसका एक उदाहरण है।

अपने UIViewController वर्ग

@implementation myViewControllerClass 

- (void) viewDidLoad { 
    //Pass in the UIViewController object, in this case itself. 
    [[myNSOBjectClass alloc] startViewController:self]; 
    .... 
} 
अपने NSObject

से फिर

@interface myNSOBjectClass{ 
    //Global access to the view controller. 
    UIViewController *viewController; 
} 
... 

@implementation myNSOBjectClass 
... 

//function that the caller calls to pass their UIViewController object 
- (void)startViewController:(UIViewController *)callerViewController{ 
    viewController = [[UIViewController alloc]init]; 
    //puts the caller's view controller to the global member. 
    viewController = callerViewController; 
    ... 
} 

अब आप अपनी उंगलियों पर दृश्य नियंत्रक है से NSObject कक्षा कॉलिंग!

चीयर्स :)!

+0

धन्यवाद :) लेकिन मैंने कई महीने पहले इस समस्या को हल किया: डी – Hayzum

+0

@ लाइफमेच मुझे एक ही समस्या थी और मुझे यह जवाब वास्तव में उपयोगी पाया – Alessandro

2

इस कोड को आजमाएं। यह आपको मदद करेगा ......

अपने बटन पर कार्रवाई करें आपको अपने UINavigationController & वर्तमान व्यू कंट्रोलर को भेजना होगा। क्योंकि एनएसओब्जेक्ट क्लास को नियंत्रक नहीं मिला है।

अपने बटन कार्रवाई में इस कोड डाल:

#import "Method_Action_class.h" 

@implementation Method_Action_class 

-(void)login_method_called:(UINavigationController*)navigation withCurrentViewController:(UIViewController*) controller 
{ 
    Home_ViewController *home = [[Home_ViewController alloc] initWithNibName:@"Home_ViewController" bundle:nil]; 
    [navigation pushViewController:home animated:YES]; 
} 
@end 
:

#import <Foundation/Foundation.h> 
#import "Home_ViewController.h" 

@interface Method_Action_class : NSObject 

- (void)login_method_called:(UINavigationController*)navigation withCurrentViewController:(UIViewController*) controller; 
@end 

अपने NSObject मीटर वर्ग में इस कोड डाल:

[demo login_method_called:self.navigationController withCurrentViewController:self]; 

अपने NSObject ज वर्ग इस कोड डाल में

और अपना कोड बनाएं।

9

अपने IBAction या विशिष्ट विधि लिखने पर यह:

UIWindow *window=[UIApplication sharedApplication].keyWindow; 
UIViewController *root = [window rootViewController]; 

UIStoryboard *storyboard = root.storyboard; 
CustomViewController *vcc =(CustomViewController *) [storyboard instantiateViewControllerWithIdentifier:@"storyBoardID"]; 

[root presentModalViewController:vcc animated:YES]; 
0

मैं दृश्य नियंत्रक कक्षा में एक obersver बनाया है और NSObject उपवर्ग से NSNotification केंद्र का उपयोग कर धक्का दृश्य नियंत्रक और बाद अधिसूचना की एक प्रणाली की घोषणा और यह काम कर रहा है है कुंआ।

दृश्य नियंत्रक में: [[NSNotificationCenter defaultCenter] addObserver: स्वयं चयनकर्ता: @ चयनकर्ता (dismissPickerView) नाम: kNotificationDismissPicker ऑब्जेक्ट: nil];

NSOject के उप-वर्ग में: [[NSNotificationCenter defaultCenter] postNotificationName: kMoveToAchievementView ऑब्जेक्ट: nil];

0

मैं अपने NSObject वर्ग में इस तरह का प्रयोग किया:

[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:yourMapViewContorller animated:YES completion:nil]; 

मुझे आशा है कि यह उपयोगी है।

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