有一个当前视图UIViewController
调用“LoginView”,但我不在,我在一个NSObject
班级,我想打电话,显示另一个UIViewController
名为“MapView”的视图。我怎样才能做到这一点?
问题就像上面的截图。
有一个当前视图UIViewController
调用“LoginView”,但我不在,我在一个NSObject
班级,我想打电话,显示另一个UIViewController
名为“MapView”的视图。我怎样才能做到这一点?
问题就像上面的截图。
在您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];
我假设您正在尝试从 NSObject 类的 UIViewController 类访问您的 UIViewController 成员。只需将 UIViewController 成员传递给 NSObject 类即可。在这种情况下是一个自我。让你做的是你可以从另一个类中更改、编辑、删除任何你想在你的 UIView 中做的事情。下面是一个例子。
从 UIViewController 类调用 NSObject 类
@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 类中这样使用:
[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:yourMapViewContorller animated:YES completion:nil];
我希望它有用。
您不应该在模型中实例化和显示视图控制器。视图应该由模型驱动。
在这种情况下,您提到LoginView
作为您的起点。当满足某些条件时(可能是成功登录?),您应该相应地更新底层模型,然后显示MapView
.
从内部LoginView
:
MapView *mapView = [[MapView alloc] init];
如果您的应用使用导航控制器:
[self.navigationController pushViewController:mapView animated:YES];
否则:
[self presentViewController:mapView animated:YES completion:<nil or block>];
试试这个代码。它会帮助你......
在您的按钮单击操作中,您必须发送您的 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
并构建您的代码。
我在视图控制器类中创建了一个 obersver,并使用 NSObject 子类的 NSNotification 中心声明了一个推送视图控制器和发布通知的方法,它运行良好。
在视图控制器中:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPickerView) name:kNotificationDismissPicker object:nil];
在 NSOject 的子类中:[[NSNotificationCenter defaultCenter] postNotificationName:kMoveToAchievementView object:nil];