以编程方式弹出UIView失败

时间:2010-03-05 16:06:57

标签: iphone cocoa-touch uikit uiview uinavigationcontroller

我无法以编程方式从视图中删除堆栈。我做的事情有点费解,这当然没有帮助。这就是我想要做的事情:

  1. 用户位于选项卡视图控制器的一个选项卡中。
  2. 用户从包含URL的表中选择项目。
  3. App切换到另一个标签视图,并将现有的UIWebView设置为所选的URL。
  4. 弹出UIWebView堆栈上的任何视图,显示UIWebView。
  5. 我已经完成了第三步工作。但是,似乎无法从堆栈中弹出任何视图。这是我的尝试:

    - (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:不会执行任何操作。

    任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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
     

设置导航控制器   在显示其视图之前。

     

返回值

     

包含视图的数组   从中弹出的控制器   堆。讨论

     

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