如何正确切换视图

时间:2014-11-25 12:38:07

标签: ios objective-c view

我尝试使用滑动手势来切换视图。我的滑动正在工作并正在处理,但不知何故,视图切换功能不正确。

以下代码用于滑动手柄:

-(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;我正在使用storyboard并且有一个带有一些标签和颜色的StatisticsViewController来测试),我只是得到一个删除视图后出现黑屏。 顺便说一句,我正在使用名为FrontPageViewController的rootviewcontroller工作。 我不知道它是否会更多"正确"有一个干净的视图控制器(root)加载在frontpageviewcontroller中,然后如果我需要加载另一个视图切换它。 (但我不知道为什么我目前的方法不起作用。) 提前致谢

1 个答案:

答案 0 :(得分:1)

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

关于你的方法,遗憾的是我不能用评论来澄清一些观点,但你不应该像这样进行视图切换。

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

您可以通过在故事板中创建带有标识符的segue并将以下内容添加到您的手势处理程序方法来实现:

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

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

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

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