打开一个新的ViewController而不传入引用

时间:2014-12-15 15:15:59

标签: ios objective-c xcode uiviewcontroller

我对Xcode很新,在打开新视图时遇到了一些困难。

我目前使用这种方式打开一个新视图。它存储在实用程序NSObject类中:

+ (void)OpenSettings:(UIViewController *)VC{
    Settings *settings = [[Settings alloc] initWithNibName:@"Settings" bundle:nil];
    second.userID=[[[NSUserDefaults standardUserDefaults] objectForKey:@"UserID"] integerValue];
    [VC.self presentViewController:settingsInst animated:NO completion:nil];
}

无论如何我可以打开视图而不必传入当前视图控制器吗?这不是一个大问题,但是对于我来说,在想要打开我的设置视图的类中调用以下内容时,它看起来有些不整洁:

[Utilities OpenSettings:self];

2 个答案:

答案 0 :(得分:0)

(1)因为你说你是Xcode的新手:你知道故事板吗?如果您还没有,请查看它:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/SecondTutorial.html 据我了解,您正在尝试封装“推送设置视图”功能,这可以通过故事板中的segue轻松实现。

(2)如果您不想出于任何原因使用故事板,您可以编写自己的继承自UIViewController的超类:

<强> MyViewController.h

@interface MyViewController : UIViewController

@end

<强> MyViewController.m

@implementation MyViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

-(void) openSettings
{
    Settings *settings = [[Settings alloc] initWithNibName:@"Settings" bundle:nil];
    settings.userID=[[[NSUserDefaults standardUserDefaults] objectForKey:@"UserID"] integerValue];
    [self presentViewController:settings animated:NO completion:nil];
}   
@end

从MyViewController继承的任何ViewController现在都可以使用

[self openSettings]

请记住,UITableViewController不是UIViewController的子代。如果您想在此处使用相同的功能,则还必须创建自定义MyTableViewController。

答案 1 :(得分:0)

精确的解决方案取决于您的视图控制器层次结构。我假设您的有效UINavigationController上有window(可能是AppDelegate中创建的):

[self.navigationController.topViewController presentViewController:settings animated:NO completion:nil];

会做到的。如果您可以发布主视图结构,我们可以提供更多帮助(您使用UITabBarControllerUINavigationController还是仅使用视图等?)