制造一个“洞”'在UITabBarController或UINavigationController中?

时间:2011-12-01 14:17:50

标签: iphone ios uinavigationcontroller uitabbarcontroller

如何在标签栏应用程序中“打洞”,基于标签栏的应用程序可以显示每个标签中的uinavigationcontroller背后的视图? (可以选择关闭此打孔)。

我的代码,即应用代理,用于创建标签:

OneRootViewController *oneRootViewController = [[OneRootViewController alloc] initWithNibName:@"OneRootViewController" bundle:nil];
UINavigationController *oneNav = [[UINavigationController alloc] initWithRootViewController:oneRootViewController];
oneNav.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"One" image:[UIImage imageNamed:@"one.png"] tag:0];

TwoRootViewController *twoRootViewController = [[TwoRootViewController alloc] initWithNibName:@"TwoRootViewController" bundle:nil];
UINavigationController *twoNav = [[UINavigationController alloc] initWithRootViewController:twoRootViewController];
twoNav.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Two" image:[UIImage imageNamed:@"two.png"] tag:1];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:oneNav, twoNav, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

以下是我希望它如何工作:

-----------------------------
|                           |
|     ---------------       |
|     |             |       |
|     | hole which  |       |
|     | shows the   |       |
|     | same view   |       |
|     | in each tab |       |
|     ---------------       |
|                           |
|                           |
-----------------------------
|            |              |
|   tab 1    |   tab 2      |
|            |              |
-----------------------------

这里有一个关于透明矩形的线程 - iPhone - Draw transparent rectangle on UIView to reveal view beneath - 但我不知道如何在我的情况下这样做..我会将我的导航控制器或标签栏控制器子类化(即使这样做也是合法的),如果是的话,我该如何选择这个洞?

3 个答案:

答案 0 :(得分:10)

为什么不在Tab-bar控制器上添加一个UIView(它将作为一个“洞”)?

你可以在application:didFinishLaunchingWithOptions:中将它添加到应用程序的UIWindow中:

// ...
self.window.rootViewController = self.tabBarController;

MyView *holeView = [[MyView alloc] initWithFrame:CGRectMake(hole coordinates)];
[self.window addSubview:holeView];
[holeView release];

[self.window makeKeyAndVisible];

答案 1 :(得分:3)

这可以通过以下方式轻松实现:

  • 在AppDelegate中创建@Property UIView
  • 创建UIView对象,并在@Property方法
  • 中分配给didFinishLaunching
  • 只需设置视图。
  • 将其添加为mainView中的子视图(与我们在AdMob中的操作相同,我们在所有其他子视图中的View底部显示添加。)
  • 您可以sharedApplication AppDelegate访问该视图,您可以显示和隐藏该视图。

就是这样。你需要什么特别的?如果这不起作用,请提供一些特定要求的亮点。

除上述答案外,您还可以为iPhone购买ToastMessage。您可以使用该方式在给定的特定时间内显示和隐藏您的视图。

答案 2 :(得分:1)

或单独在每个选项卡中创建一个视图并同步这些值。详细地说,您将创建一个视图,但将其链接到两个选项卡。只要内存中至少有一个标签,就应该自动调节Retain-Count。