使按钮在所有视图控制器上保持不变

D-N*_*ice 20 uiviewcontroller uiview uiwindow ios

我想在我的应用程序的右下角有一个持久性按钮.在所有视图过渡期间,按钮应保持静态.我在确定添加按钮的视图时遇到问题.我知道按钮应该存储在AppDelegate中,但我不知道除了窗口之外添加它的其他视图是什么意思.将其添加到窗口的一个缺点是,当在后台运行应用程序(即电话)时,添加的状态栏填充将按下窗口.一般来说,将它添加到窗口似乎是一个hacky解决方案 - 任何想法?

Can*_*Can 41

是的,将它添加到UIWindow将是非常hacky和挑剔.

故事板

如果您使用的是Storyboard和iOS 5.0,那么您应该可以使用容器视图并执行以下操作:

MAH BUTTON很高兴

这是另一张图片,展示了第一个View Controller的相当简单的结构:

在此输入图像描述

左侧的视图控制器有一个容器,然后是一个视图,它将按钮放在它上面.容器指示导航控制器(直接向右)应出现在其自身内,该关系由=([])=>箭头显示(正式称为嵌入segue).最后,导航控制器将其根视图控制器定义为右侧的控制器.

总之,第一个视图控制器在容器视图中使用顶部的按钮进行煎饼,因此内部发生的所有内容都必须将按钮放在顶部.

使用childViewControllers

又名."我讨厌故事板和小狗"模式

使用与Storyboard版本类似的结构,您可以使用其按钮创建基本视图控制器,然后添加视图,该视图将成为应用程序的新"根",位于下方.

为了清楚FakeRootViewController起见,让我们调用一个持有按钮的视图控制器和视图控制器,它实际上是应用程序的根目录:RootViewController.所有后续的视图控制器甚至都不会知道FakeRootViewController上面的其他所有人.

FakeRootViewController.m

// The "real" root
#import "RootViewController.h"

// Call once after the view has been set up (either through nib or coded).
- (void)setupRootViewController
{
    // Instantiate what will become the new root
    RootViewController *root = [[RootViewController alloc] <#initWith...#>];

    // Create the Navigation Controller
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:root];

    // Add its view beneath all ours (including the button we made)
    [self addChildViewController:nav];
    [self.view insertSubview:nav.view atIndex:0];
    [nav didMoveToParentViewController:self];
}
Run Code Online (Sandbox Code Playgroud)

AppDelegate.m

#import "FakeRootViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    FakeRootViewController *fakeRoot = [[FakeRootViewController alloc] <#initWith...#>];

    self.window.rootViewController = fakeRoot;
    [self.window makeKeyAndVisible];

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

这样,你就可以享受在窗口上插入按钮的所有好处,而不会有任何负罪感和"我真的应该成为程序员吗?" 它导致.