0

我有一个 UISplitViewController,主视图设置如下:

UITabBarController
  Tab1:
    UINavigationController -> UIViewController -> UIViewController
  Tab2:
    UINavigationController -> UIViewController

每个 UIViewController 都是一个表格视图,当用户在最后一个中选择一行时,详细视图中会显示一个图像,其中包含一个 UIScrollView。

选项卡栏控制器是 UISplitViewControllerDelegate 并处理在滚动视图顶部的工具栏上放置按钮。

问题是,我想添加代码以在用户做出选择时关闭弹出框。当按钮上升时,指向弹出框的指针必须保存在选项卡栏控制器中,然后在用户做出最终选择时用于关闭弹出框几个视图控制器。视图控制器似乎没有任何方法需要该指针来获取它,而无需做一些像将它存储在 App Delegate 中这样的粗俗操作。

我没有看到其他人问这个问题,这让我相信我再次忽略了一些简单的事情。请赐教!

4

2 回答 2

0

您可以创建一个单例类来跟踪您的弹出框状态,然后将其平等且轻松地提供给所有类。这样,它可以很容易地从任何代码更新和访问,而不必直接让应用程序代理负担过重,即使这基本上是相同的想法,但在它自己的单例中更简洁一些。

于 2012-06-18T22:21:04.973 回答
0

听起来您的标签栏控制器已经是 的子类UITabBarController,这意味着您已经在其中获得了一些自定义代码。我建议标签栏控制器是弹出框的主要所有者,表格视图控制器有责任简单地通知标签栏控制器已进行选择。标签栏控制器可以通过关闭弹出框来响应该消息。您可以利用UIViewController已经具有访问包含给定控制器的选项卡栏控制器的方法这一事实。

所以它看起来像这样:

@interface MyTabBarController : UITabBarController
- (void)itemWasSelected;
@end

@implementation MyTabBarController {
  UIPopoverController *popover;
}

- (void)itemWasSelected {
  [popover dismissPopoverControllerAnimated:YES];
}
@end

//////////////

@implementation TableController

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)path {
  // Do whatever else you want to do
  MyTabBarController *tabController = (MyTabBarController *)self.tabBarController;
  [tabController itemWasSelected];
}

使用这个解决方案,表格控制器不必知道任何关于弹出框的信息;它只需要知道它将在 a 中呈现MyTabBarController,这对它来说似乎是一件合理的事情。

于 2012-06-23T00:47:13.770 回答