【问题标题】:UIPopOverController with UINavigationController with Xcode 4.2.1UIPopOverController 与 UINavigationController 与 Xcode 4.2.1
【发布时间】:2012-02-07 15:23:29
【问题描述】:

这听起来可能很简单,但不知何故我无法摆脱它。我创建了一个空应用程序,通过在 AppDelegate.h 和 AppDelegate.m 文件中创建它们添加了两个 tabBar 项。现在对于我的第二个 tabBar 项,当用户单击第二个 tabBar 项时,我想显示一个 popOverController。我通过这个链接Link 以编程方式创建了它。现在我的问题是我想在我创建了 popOverController (AppDelegate.m) 的代码中使用 Navigation Controller,以便在我的 popOverController.m 中使用 NavController 来推送其他视图。如果有人有一个简单的方法来实现这一点,将不胜感激。

谢谢

【问题讨论】:

  • 您不需要创建 PopOverController 的子类,除非您正在为它制作自己的 UI。
  • 查看 Apple 的 iPad 人机界面指南文档,它确实应该完全足以实现您想要的。这似乎微不足道,除非我遗漏了什么?

标签: objective-c ipad ios5 xcode4.2


【解决方案1】:

我对您的问题出在哪里有点困惑。您尝试做的事情是可能的,并且应该是直截了当的。如果您的问题是 Next 视图没有被推送,因为在 popoverController 中您无权访问self.navigationController。如此简单的解决方案,创建一个 UINavigationController 变量并将 navigationController 传递给您的弹出框或使用通知将要推送回您的 AppDelegate 的视图传递。

编辑

您可以使用它来收听通知:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(popOverViewControllerSelected:) name:@"popOverViewSelectedViewToPush" object:someObjectTellingYouWhatViewToPush];

然后用它来发送通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"popOverViewSelectedViewToPush" object:@"ViewController1"];

选择器将是您的函数名称(我只是放了一个描述性名称“popOverViewControllerSelected”),并且对象需要是有关要推送的 viewController 的信息(即 1、2、3 或 @“view1”)。那么你需要:

- (void)popOverViewControllerSelected:(id)sentObject
{
     // If your passing an NSNumber could use a switch
                 switch ((int)sentObject) {
            case 0:
                //Push This view
                break;
            case 1:
                //Push that view
                break;
            case 2:
                //Push someother view
                break;
            default:
                break;
        }
}

我所说的另一种方式是在你的 popOverViewController.h 中添加

@interface .........
{
     UINavigationController *navController;
}
@property (nonatomic, retain) UINavigationController *navController;

在你的 popOverViewController.m 添加:

@synthesize navController;

那么你在哪里添加 popOverViewController 只需添加:

[popOverViewController setNavController:self.navigationController];

现在您可以在 PopOverViewController 中调用:

[navController pushViewController:someViewController animated:YES];

但我建议做第一个选项。

【讨论】:

  • 您好 Jaybit,您的解决方案似乎很有说服力,您能否提供一个示例代码以便更好地理解,因为我是 IOS 新手。
  • 我编辑了我的帖子以获得更多信息和代码。这里的主要思想是访问 NavigationController。第一部分是通过通知,第二部分是通过将 navigationController 传递给 popover。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多