9

有一个当前视图UIViewController调用“LoginView”,但我不在,我在一个NSObject班级,我想打电话,显示另一个UIViewController名为“MapView”的视图。我怎样才能做到这一点?在此处输入图像描述

问题就像上面的截图。

4

6 回答 6

10

在您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];
于 2015-04-21T13:20:32.713 回答
5

我假设您正在尝试从 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;  
    ...
}

现在您的视图控制器触手可及!

干杯:)!

于 2013-12-11T14:08:31.783 回答
3

我在我的 NSObject 类中这样使用:

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

我希望它有用。

于 2017-12-08T10:56:05.870 回答
2

您不应该在模型中实例化和显示视图控制器。视图应该由模型驱动。

在这种情况下,您提到LoginView作为您的起点。当满足某些条件时(可能是成功登录?),您应该相应地更新底层模型,然后显示MapView.

从内部LoginView

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

如果您的应用使用导航控制器:

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

否则:

[self presentViewController:mapView animated:YES completion:<nil or block>];
于 2012-10-19T16:32:50.703 回答
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

并构建您的代码。

于 2015-02-19T09:03:32.623 回答
0

我在视图控制器类中创建了一个 obersver,并使用 NSObject 子类的 NSNotification 中心声明了一个推送视图控制器和发布通知的方法,它运行良好。

在视图控制器中:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPickerView) name:kNotificationDismissPicker object:nil];

在 NSOject 的子类中:[[NSNotificationCenter defaultCenter] postNotificationName:kMoveToAchievementView object:nil];

于 2017-06-26T09:32:23.823 回答