1

当用户点击警报视图中显示的自定义“后退”按钮时,我在返回导航到上一个视图控制器(在我的导航控制器的堆栈中)时遇到了一些问题。我已经尝试了几种方法来做到这一点,但我一直无法做到。当该按钮被点击时,应用程序只是返回到弹出警报的控制器(就像用户按下“取消按钮”一样)。希望你能通过这个示例代码理解我:

在 viewDidLoad 中,我弹出警报:

UIAlertView *alert = [[UIAlertView alloc] 
        initWithTitle:@"XXXXXX"
        message:@"" 
        delegate:self  
        cancelButtonTitle:@"OK"
        otherButtonTitles:@"Back", nil];
    [alert show];
    [alert release];

然后,在视图控制器的代码中,我调用下一个操作来尝试返回:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
if (buttonIndex == 1)
{
    [self.navigationController popViewControllerAnimated:YES];
}}

整个代码已执行,并且没有调试错误。如果我没有正确解释我的问题,请告诉我,我会努力做得更好!(我是西班牙人,我的英语不是最好的)。提前致谢。


我会尝试更好地解释它,以便向您展示我的问题可能更难解决......

我有一个导航控制器,它在确定的时刻显示一个带有标签栏的视图。您可能知道没有办法在导航控制器中实现标签栏控制器,因此我使用了插入该标签栏的“自定义控制器”。

然后,从带有标签栏的那个视图(我已经在其中添加了一些子视图)我想导航回(单击警报按钮)到没有标签栏的视图,我假设它是堆栈中的上一个视图导航,正如我在导航栏中按下后退按钮时看到的那样......

我不知道现在是不是更清楚了,还是我让你更困惑了……如果你愿意,我可以试着给你做一个控制器图。谢谢你的帮助!

4

2 回答 2

0

尝试在单独的线程中。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
if (buttonIndex == 1)
{
   [self performSelectorInBackground:@selector(newThreadMethod) withObject:nil];
}
}
-(void)newThreadMethod{
     [self performSelectorOnMainThread:@selector(go) withObject:nil waitUntilDone:NO];
 }   
-(void)go{
       [self.navigationController popViewControllerAnimated:YES];
  }

但这不是正确的做法。但暂时它会帮助你。

于 2011-02-09T10:48:35.123 回答
0

对于选项卡栏的部分,我已成功将 navControllers 与 tabController 合并。标签栏控制器必须在图表的顶部,而不是每个标签栏项目的视图控制器,使用 navControllers,特别是在第一个标签栏项目中;只需将标签栏隐藏在第一个viewDidLoad并在需要时将其取消隐藏。

于 2011-09-21T17:52:52.213 回答