0

我有一个 tabBarApplication 作为模板,每个选项卡上都有一个 UINavigation 模板。

我想使用该示例(有点)并将其转换为另一个应用程序中的单个 UIViewController。我已经展示了 2 段代码,第一个是我的模板,后者是我正在尝试制作的。谁能给我一些提示或帮助如何做到这一点?我不断收到错误,但它们对我来说没有意义,因为 tabBarApp 不需要它声明的 viewController。

第一个代码(示例):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self setupFetchedResultsController];

if (![[self.fetchedResultsController fetchedObjects] count] > 0 ) {
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted");
    [self importCoreDataDefaultRoles];
}
else {
    NSLog(@"There's stuff in the database so skipping the import of default data");
}

// The Tab Bar
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

// The Two Navigation Controllers attached to the Tab Bar (At Tab Bar Indexes 0 and 1)
UINavigationController *personsTVCnav = [[tabBarController viewControllers] objectAtIndex:0];
UINavigationController *rolesTVCnav = [[tabBarController viewControllers] objectAtIndex:1];
return YES;
}

第二个代码(我想要做的):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self setupFetchedResultsController];

if (![[self.fetchedResultsController fetchedObjects] count] > 0 ) {
    NSLog(@"!!!!! ~~> There's nothing in the database so defaults will be inserted");
    [self importCoreDataDefaultRoles];
}
else {

UIViewController *mainViewController = (UIViewController *)self.window.rootViewController;

UINavigationController *readingsTVCnav = [[mainViewController viewController] objectAtIndex:0];

// Override point for customization after application launch.
return YES;
}

代码的获取部分与已经设置和工作的核心数据相关。此更改的原因是我希望将普通视图控制器设置为初始屏幕而不是 tabBarConfiguration。

干杯杰夫

编辑:为了清楚起见,我添加了一张图片

在此处输入图像描述

4

1 回答 1

1

根据您在图像中描述和描绘的内容,您已将导航控制器设置为应用程序的根视图控制器。因此,您可以在应用程序委托的方法中访问它(如果需要),didFinishLaunchingWithOptions:如下所示:

UINavigationController *navController = (UINavigationController *)self.window.rootViewController;

尽管对于您的应用程序,我认为您没有任何理由需要从您的应用程序委托中引用导航控制器。您需要的所有设置(除了您所说的已经工作的代码数据代码)都可以通过情节提要处理。

在您的 nagivationController 的根 viewController(具有所有按钮的那个)中,您应该设置从每个按钮到故事板中适当的 viewController 的 segue。Bure 确保将其设置为“push”segues,以便它将视图控制器推送到您的 navigationController 的导航堆栈上。如果发生 segue 时需要对子视图控制器进行任何特定设置,则可以实现如下prepareForSegue:方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowMyViewController"]) {

        MyViewController *vc = (MyViewController*)segue.destinationViewController;       
        vc.title = @"My Title";
        vc.someProperty = @"Some Value";
    }
}

您可以(并且应该)使用唯一标识符标识情节提要中的每个转场,以便在调用此方法时可以识别它们。

于 2012-04-10T00:28:23.957 回答