【问题标题】:how to load first view of SplitViewController in ipad app如何在 ipad 应用程序中加载 SplitViewController 的第一个视图
【发布时间】:2013-07-18 07:02:32
【问题描述】:

我有带有 splitViewController 和多个 detailViewController 的 ipad,它工作正常,但我希望当用户单击登录按钮并转到 LoginScreen 时,当在登录屏幕上单击登录按钮时,它应该重新加载整个 splitViewController 并显示第一个屏幕而不是然后显示我们点击登录按钮的屏幕是我的代码

     - (void) loginPressed
    {
 LoginViewController *targetController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
targetController.modalPresentationStyle = UIModalPresentationFullScreen;

    [self.splitViewController presentViewController:targetController animated:YES completion:nil];
}

}        

这里是 Login ViewController 代码中的登录按钮

                [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadRoot" object:self];

    FirstDetailViewController*targetController=[[FirstDetailViewController alloc]init];

    [self.splitViewController pushViewController:targetController animated:YES] ;

应用委托中的通知代码。

  -(void)actionNotificationData:(NSNotification *)notification {



    jani=@"No";


   self.window.rootViewController=splitViewController;
   }

这是我的 RootViewController,它是 tableView 是 splitView Conroller 中的代码,当我们点击任何单元格移动到新视图时

[self.appDelegate.splitViewController viewWillDisappear:YES];
NSMutableArray *viewControllerArray=[[NSMutableArray alloc] initWithArray:[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] viewControllers]];
[viewControllerArray removeLastObject];


if (row == 0) {


    self.firstDetailViewController=[[[FirstDetailViewController alloc] init]autorelease];
    [viewControllerArray addObject:self.firstDetailViewController];
    self.appDelegate.splitViewController.delegate = self.firstDetailViewController;







  }

if (row == 1) {



    self.secondDetailViewController=[[[SecondDetailViewController alloc]init]autorelease];
    [viewControllerArray addObject:self.secondDetailViewController];
    self.appDelegate.splitViewController.delegate = self.secondDetailViewController;
}

if (row == 2) {
    self.myLearningViewController=[[[MyLearningViewController alloc]init]autorelease];
    [viewControllerArray addObject:self.myLearningViewController];
    self.appDelegate.splitViewController.delegate = self.myLearningViewController;
}


if (row == 3) {
    self.communityViewController=[[[CommunityViewController alloc]init]autorelease];
    [viewControllerArray addObject:self.communityViewController];
    self.appDelegate.splitViewController.delegate = self.communityViewController;
}


if (row == 4) {
    self.reportsViewController=[[[ReportsViewController alloc]init]autorelease];
    [viewControllerArray addObject:self.reportsViewController];
    self.appDelegate.splitViewController.delegate = self.reportsViewController;
}




if (row == 5) {


    self.walkInViewController=[[[WalkInViewController alloc]init]autorelease];

    [viewControllerArray addObject:self.walkInViewController];

    //self.appDelegate.splitViewController.delegate = self.secondDetailViewController;

    self.appDelegate.splitViewController.delegate = self.walkInViewController;


}

if (row == 6) {


    self.postDataViewController=[[[PostDataViewController alloc]init]autorelease];

    [viewControllerArray addObject:self.postDataViewController];


    self.appDelegate.splitViewController.delegate = self.postDataViewController;


}



[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] setViewControllers:viewControllerArray animated:NO];    


[self.appDelegate.splitViewController viewWillAppear:YES];
[viewControllerArray release];


}

【问题讨论】:

  • 拆分视图控制器不能进行推送,只有导航控制器可以这样做。登录后,您需要关闭 LoginViewController,而不是推送。
  • 如果我关闭 loginViewController 然后它会移动到它单击的视图如何首先调用视图
  • 不清楚你在哪里有什么控制器。在您进行演示之前屏幕上显示的是什么?
  • 我想如何简单地从登录屏幕移动到 FirstDetailViewController
  • 是的,但如果我不知道您的应用程序结构是什么样的,我无法帮助您。你能回答我最后一个问题吗?另外,您是从哪个屏幕点击登录按钮的?

标签: ios ipad uisplitviewcontroller


【解决方案1】:

如果没有更多关于如何在多个细节视图控制器之间移动的信息,很难回答这个问题。我假设您是通过将细节控制器嵌入导航控制器并进行推送和弹出来做到这一点的。

如果这是设置,那么您不应该分配初始化 FirstDetailViewController 然后推送它。如果 FirstDetailViewController 首先出现在屏幕上,然后你推到第二个,最后从那里呈现 LoginViewController,你应该这样做:

- (IBAction)signInButtonClicked{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadRoot" object:self];

    UINavigationController *nav = [(UISplitViewController *)self.presentingViewController viewControllers][1]
    [nav popToRootViewControllerAnimated:NO];
    [self dismissViewControllerAnimated:YES completion:nil];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2012-04-10
    相关资源
    最近更新 更多