【问题标题】:PopViewController in Tabbar applicationTabbar 应用程序中的 PopViewController
【发布时间】:2012-06-01 06:21:30
【问题描述】:

我正在开发一个标签栏应用程序。

                           TAB-BAR CONTROLLER
                                   |
          _______________________________________________________
         |                |                 |                  |

       View 1           View 2            View 3            View 4
        |                 |
     SearchingON       Detail View

问题 1:我有一个按钮(比如说退出),单击视图 4 上的按钮时,我想弹出视图 2 的详细视图。

这样在新登录后新用户不应该访问详细信息。

我试过了:

 if ([[NSUserDefaults standardUserDefaults] valueForKey:@"IsChattingON"])
 {
    ChatDetail *chat = [[ChatDetail alloc] initWithNibName:@"ChatDetail" bundle:nil];

    [chat BackButtonClicked:nil];
 }

在详细视图返回按钮中,我的代码是:

-(IBAction)BackButtonClicked:(id)sender
{

 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"IsChattingON"];

 [self.navigationController popViewControllerAnimated:YES];
}

无论详细视图是否打开,此处的用户默认值都具有布尔值。

问题 2:我在视图 1 的表视图上应用搜索,如果单击视图 4 退出按钮,我想删除搜索。如果单击 View 4 的 Signout 按钮,我想刷新我的 View 1。

为了删除搜索,我已经完成了这段代码,但没有得到想要的结果。

 PeopleController *People = [[PeopleController alloc] initWithNibName:@"PeopleController" bundle:nil];

 People.isSearchingRecords = NO;

到目前为止,我已经搜索了有关 popViewControllers 的信息,但找不到这个场景。请让我知道如何实现此功能。

【问题讨论】:

  • 您不想在单击时显示任何选项卡的根屏幕吗?不管最后状态是什么
  • +1,这次又好又棘手的问题:P.. 还记得我吗?..
  • 很好,太好了......所以享受 iPhone 开发与否。??

标签: iphone ios uitabbarcontroller uinavigationcontroller


【解决方案1】:

当用户点击注销时,您不应该分配新的视图控制器, 相反,您应该执行以下操作

- (void) logOut
{
   //get the view 2
   //you should have a way to access view 2

   [view2 closeChatView];
}

//On view 2 maintain a reference of chat detail controller
- (void) closeChatView
{
   [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"IsChattingON"];

   //chat is the reference to the chat details controller
   [chat.navigationController popViewControllerAnimated:YES];
}

【讨论】:

  • 其实我有自定义标签栏,我找不到任何访问视图 2 的方法,我该怎么办??
  • 自定义标签栏,你应该创建一个 NSMutableArray *views 的属性;并围绕它创建一个属性,这将保存自定义标签栏中的所有视图,然后访问第二个视图 [tabbar.views objectAtIndex:1];
  • 还有其他的方法,更简单的方法,你可以在view2类中注册一个通知监听器,当按下注销时向view2发布一个通知,这样你就不需要知道view 2了,有关通知的进一步阅读,请查看本教程iphonebyradix.blogspot.com/2011/07/…,如果有效,请不要忘记接受答案:)
【解决方案2】:

我假设你在 appDelegate 中保留了导航控制器的实例,那么你可以试试这个:

NSArray *viewNavStack = appDelegate.viewNavController.viewControllers;
    if ([viewNavStack count] > 1) {
        [appDelegate.overviewNavController popToRootViewControllerAnimated:NO];
    }

【讨论】:

    【解决方案3】:

    我终于找到了问题 2 的解决方案:

    我将 NSUserDefault BOOL 设置为 NO,并且在 ViewWillAppear 中,无论搜索是否打开,我都会获得 UserDefaults 值。

    点击退出按钮:

      [[NSUserDefaults standardUserDefaults]setBool:NO forKey:@"SearchingON"];
    

    在视图 1 上:

           isSearchingRecords = [[NSUserDefaults standardUserDefaults] boolForKey: @"SearchingON"];
    
        if (isSearchingRecords)
        {
            self.btnSearchCancel.hidden = NO;
        }else
        {
            self.btnSearchCancel.hidden = YES;
        }
    

    但找不到问题 1 的解决方案 - 通过另一个选项卡弹出视图,如果有人有任何想法请告诉我!!

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      相关资源
      最近更新 更多