我尝试使用滑动手势来切换视图。我的滑动正在工作并正在处理,但不知何故,视图切换功能不正确。
以下代码用于滑动手柄:
-(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中,然后如果我需要加载另一个视图切换它。 (但我不知道为什么我目前的方法不起作用。) 提前致谢
答案 0 :(得分:1)
您的主要问题是因为您要将新视图添加到刚删除的同一视图中。您应该将其添加到其父视图。
关于你的方法,遗憾的是我不能用评论来澄清一些观点,但你不应该像这样进行视图切换。
你不应该从控制器替换视图,你应该在控制器之间切换。
您可以通过在故事板中创建带有标识符的segue并将以下内容添加到您的手势处理程序方法来实现:
[self performSegueWithIdentifier: @"MySegue" sender: self];
如果您的唯一目的是替换同一控制器中的视图,您应该以编程方式创建它(只是视图而不是控制器),而不是通过从一个控制器添加视图到另一个控制器。
如果您需要有关segue的任何帮助,我建议您首先阅读"添加一个Segue以向前导航"来自https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/SecondTutorial.html
要手动执行segue,您需要为您创建的segue选择一个标识符。