2010-03-05 152 views
0

我在编程上从视图中删除堆栈时遇到了问题。我做的事情有点复杂,这肯定无助于事情。这是我想要做的:以编程方式弹出UIView失败

  1. 用户位于标签视图控制器的一个选项卡中。
  2. 用户从包含URL的表中选择项目。
  3. 应用程序切换到另一个选项卡视图,并将现有的UIWebView设置为选定的URL。
  4. 弹出UIWebView堆栈上的任何视图,显示UIWebView。

我有第三步工作正常。但是,似乎无法从堆栈中弹出任何视图。这里是我的尝试:

- (void)openAndDisplayURL:(NSString*)URL { 
tabBarController.selectedIndex = 0; 

UIViewController *selectedController = tabBarController.selectedViewController; 

if ([selectedController isKindOfClass:[UINavigationController class]]) { 
    UINavigationController *controller = (UINavigationController*)selectedController; 
    NSArray *views = controller.viewControllers; 
    for (id view in views) { 
     if([view respondsToSelector:@selector(openURLWithString:)]) { 
      NSString *completeURL = [NSString stringWithFormat:@"http://%@",URL]; 
      [view openURLWithString:completeURL]; 
     } else if ([selectedController isKindOfClass:[UINavigationController class]]) { 
      UINavigationController *subcontroller = (UINavigationController*)selectedController; 

      [subcontroller.navigationController popViewControllerAnimated:NO]; 

     } 
    } 
} 
} 

调试显示期望的类型视图的预期数量。当它是一个需要删除的视图时,它会正确输入else块,但调用popViewControllerAnimated:什么也不做。

任何帮助,将不胜感激。

回答

3

您应该致电UINavigationController popToViewController方法。

popToViewController:动画:

入时视图控制器直到 指定视图控制器处于 顶部导航堆栈的。

  • (NSArray的*)popToViewController:(UIViewController的 *)的viewController动画:(BOOL)动画参数

的viewController

The view controller that you want to be at the top of the stack. 

动画

Set this value to YES to animate the transition. Pass NO if you are 

设立导航控制器显示其视图之前的。

返回值

包含视图 控制器从 堆栈被弹出该数组。讨论

有关导航 栏如何更新信息,请参阅“更新 导航栏”。