2012-10-19 99 views
7

當前有一個視圖爲UIViewController,它稱爲「LoginView」,但我不在,我在NSObject類中,我想調用,顯示另一個稱爲「MapView」的UIViewController。我怎樣才能做到這一點? enter image description here如何從NSObject類顯示UIViewController?

問題就像上面的截圖一樣。

+1

兩件事:你爲什麼試圖在模型中實例化並顯示一個視圖控制器,以及[你試過了什麼?](http://www.whathaveyoutried.com) –

+0

AppDelegate * appDelegate =(AppDelegate * )[[UIApplication sharedApplication]委託]; [[appDelegate loginViewController] presentViewController:mapViewController animated:YES completion:nil]; ' 我試過那個代碼但是沒有工作.. – Hayzum

+0

你的AppDelegate類的名字真的是「AppDelegate」嗎? 此外,應該不需要從NSObject提供viewController! –

回答

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成員來自NSObject類的UIViewController類。很簡單,只需將UIViewController成員傳遞給NSObject類即可。在這種情況下,一個自我。你可以做的是你可以改變,編輯,刪除,你想在另一個類的UIView中做什麼。以下是一個例子。

從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

謝謝:)但我在幾個月前解決了這個問題:d – Hayzum

+0

@Lifematch我有同樣的問題,我發現這個答案真的有用 – Alessandro

2

試試這個代碼。它會幫助你......

在你的按鈕點擊動作你必須發送你的UINavigationController &當前ViewController。因爲NSObject類沒有找到該控制器。

在您的按鈕操作把這個代碼:

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

在你的NSObject .H類把這個代碼:

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

@interface Method_Action_class : NSObject 

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

在你的NSObject .M類把這個代碼:

#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 

並構建您的代碼。

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並聲明使用NSNotification中心從NSObject的子類推視圖控制器和後通知的方法,它是工作好。

in view controller: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPickerView)name:kNotificationDismissPicker object:nil];

NSOject的子類: [[NSNotificationCenter defaultCenter] postNotificationName:kMoveToAchievementView object:nil];

0

我用這樣在我的NSObject類:

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

我希望它是有用的。

相關問題