【问题标题】:Opening up a new ViewController without passing in reference在不传入引用的情况下打开一个新的 ViewController
【发布时间】:2014-12-15 15:15:59
【问题描述】:

我是 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];

【问题讨论】:

  • 在 UIViewController 类上使用您的新方法创建一个类别,而不是使其成为“实用程序”类的“全局”类函数,您可以在 self 上调用 presentViewController 而不是 @ 987654325@。这一切都取决于上下文。

标签: ios objective-c xcode uiviewcontroller


【解决方案1】:

(1) 因为你说你是 Xcode 的新手:你知道 Storyboard 吗?如果您还没有,请查看:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/SecondTutorial.html 据我了解,您正在尝试封装“推送设置视图”功能,这可以很容易地在情节提要中使用 segues 实现。

(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。

【讨论】:

    【解决方案2】:

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

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

    会做的。如果您可以发布您的主视图结构,我们可以提供更多帮助(您使用的是UITabBarController 还是UINavigationController 或只是一个视图等?)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      相关资源
      最近更新 更多