我对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];
答案 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];
会做到的。如果您可以发布主视图结构,我们可以提供更多帮助(您使用UITabBarController
或UINavigationController
还是仅使用视图等?)