如何正确切换视图

Posted

技术标签:

【中文标题】如何正确切换视图【英文标题】:How to switch views correctly 【发布时间】:2014-11-25 12:38:07 【问题描述】:

我正在尝试使用滑动手势来切换视图。我的滑动正在工作并正在处理,但不知何故,视图开关无法正常工作。

滑动手柄的代码如下:

-(void)handleSwipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer  
    CGPoint location = [gestureRecognizer locationInView:tableView];  
    NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:location];  
    if(indexPath)  
        userCell *cell = [tableView cellForRowAtIndexPath:indexPath]; //userCell inherits from UITableViewCell so why complain?  
        StatisticsViewController *statisticsView = [StatisticsViewController new];  
        [self.view removeFromSuperview];  
        [self.view addSubview:statisticsView.view];  
        //[self.view insertSubview:statisticsView.view atIndex:0];  
      
  `

我之前使用过 insertSubview: atIndex:0,因为我已经注释掉了。 我的问题是我试图添加的新视图没有被添加。 removeFromSuperview 在我得到黑屏的意义上起作用(因此删除了视图)。但我不明白为什么我不能添加另一个视图(我创建一个实例的 statisticsView;我正在使用情节提要并有一个带有一些标签和颜色的 StatisticsViewController 只是为了测试),删除后我只是得到一个黑屏看法。 顺便说一句,我正在使用名为 FrontPageViewController 的 rootviewcontroller 工作。 我不知道是否有一个干净的视图控制器(根)加载到 frontpageviewcontroller 中,然后在我需要加载另一个视图时将其切换出来是否更“正确”。 (但我不明白为什么我目前的方法行不通)。 提前致谢

【问题讨论】:

我不确定你是否在点燃我之前阅读了我的整个帖子。你有没有读过我写的关于我的方法的内容?可能不会?代码是否错误,您的代码可能只是描述了我对这种方法的询问,不确定..因为您的解释有点..bad 编辑:猜想你在进一步阅读后删除了你的下一条评论。我也会 我试图从超级视图中删除我的 current 视图的唯一原因是因为 [self.view addSubview:statisticsView.view];或 //[self.view insertSubview:statisticsView.view atIndex:0];正在努力显示我希望用户看到的视图。加上我首先尝试 [super.view addSubview ...........] 然后沮丧地尝试 self.view 我猜^^ use this at 将被调用一次 if([recognizer state] == UIGestureRecognizerStateBegan) zaheer,我不明白。你的话也有点绕。你能详细说明一下吗?但是我的手势没有问题(我只是用手势来做切换) 【参考方案1】:

您的主要问题是因为您将新视图添加到刚刚删除的同一视图中。您应该将其添加到其父视图中。

关于你的方法,遗憾的是我不能用 cmets 来澄清一些观点,但你不应该那样做视图切换。

您不应该从控制器替换视图,您应该在控制器之间切换。

您可以通过在情节提要中创建一个带有标识符的 segue 并将以下内容添加到您的手势处理方法中来做到这一点:

[self performSegueWithIdentifier: @"MySegue" sender: self];

如果您的唯一目的是替换同一控制器中的视图,您应该以编程方式创建它(只是视图而不是控制器),而不是通过将视图从一个控制器添加到另一个控制器。

如果您在 segue 方面需要任何帮助,我建议您首先阅读来自 https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/SecondTutorial.html 的“添加 Segue 以向前导航”

要手动执行转场,您需要为您创建的转场选择一个标识符。

【讨论】:

我打算在视图控制器之间切换,从而向用户展示各种视图控制器所拥有的不同视图(如何通过代码做到这一点?);也许我的解释有点糟糕,对此我很抱歉:) 我之所以使用视图控制器来处理其他视图控制器之间的切换,是因为我一直在阅读的书在某些时候做到了这一点。您能澄清的任何要点将不胜感激,因为我认为这是构建应用程序的基础。 如果你打算在控制器之间切换,你应该使用 segues。你可以看看developer.apple.com/library/ios/referencelibrary/GettingStarted/… 我现在会调查的,你。我在看这个函数调用 [self presentViewController:statisticsView animated:YES completion:nil]; (但它会导致黑屏;虽然没有删除视图)。我是否正确地使用不同的视图控制器来构建我的应用程序,我在这些视图控制器之间切换以向用户呈现我的不同“屏幕/页面” 我的父视图不是我的根视图控制器/初始控制器吗?感谢您的帮助和参考,帮助了我

以上是关于如何正确切换视图的主要内容,如果未能解决你的问题,请参考以下文章

iphone sdk:如何正确切换控制器

如何正确切换到不同的 ViewController

对于 Iphone,如何从当前加载的视图中引用根视图控制器,以便可以替换/切换视图

如何正确挑选出单元格附件视图

Android:在视图/活动/片段之间滑动切换

在 iOS 中切换视图的最佳方式