當前有一個視圖爲UIViewController
,它稱爲「LoginView」,但我不在,我在NSObject
類中,我想調用,顯示另一個稱爲「MapView」的UIViewController
。我怎樣才能做到這一點? 如何從NSObject類顯示UIViewController?
問題就像上面的截圖一樣。
當前有一個視圖爲UIViewController
,它稱爲「LoginView」,但我不在,我在NSObject
類中,我想調用,顯示另一個稱爲「MapView」的UIViewController
。我怎樣才能做到這一點? 如何從NSObject類顯示UIViewController?
問題就像上面的截圖一樣。
您不應該在模型中實例化並顯示視圖控制器。模型應該是驅動。
在這種情況下,您提到了LoginView
作爲您的出發點。當某些條件滿足時(成功登錄也許?),您應該相應地更新基礎模型,然後顯示MapView
。
從LoginView
內:
MapView *mapView = [[MapView alloc] init];
如果應用程序使用導航控制器:
[self.navigationController pushViewController:mapView animated:YES];
否則:
[self presentViewController:mapView animated:YES completion:<nil or block>];
我假設你想訪問你的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類!
乾杯:)!
謝謝:)但我在幾個月前解決了這個問題:d – Hayzum
@Lifematch我有同樣的問題,我發現這個答案真的有用 – Alessandro
試試這個代碼。它會幫助你......
在你的按鈕點擊動作你必須發送你的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
並構建您的代碼。
在你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];
我創建的視圖控制器類的obersver並聲明使用NSNotification中心從NSObject的子類推視圖控制器和後通知的方法,它是工作好。
in view controller: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPickerView)name:kNotificationDismissPicker object:nil];
NSOject的子類: [[NSNotificationCenter defaultCenter] postNotificationName:kMoveToAchievementView object:nil];
我用這樣在我的NSObject類:
[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:yourMapViewContorller animated:YES completion:nil];
我希望它是有用的。
兩件事:你爲什麼試圖在模型中實例化並顯示一個視圖控制器,以及[你試過了什麼?](http://www.whathaveyoutried.com) –
AppDelegate * appDelegate =(AppDelegate * )[[UIApplication sharedApplication]委託]; [[appDelegate loginViewController] presentViewController:mapViewController animated:YES completion:nil]; ' 我試過那個代碼但是沒有工作.. – Hayzum
你的AppDelegate類的名字真的是「AppDelegate」嗎? 此外,應該不需要從NSObject提供viewController! –