D-N*_*ice 20 uiviewcontroller uiview uiwindow ios
我想在我的应用程序的右下角有一个持久性按钮.在所有视图过渡期间,按钮应保持静态.我在确定添加按钮的视图时遇到问题.我知道按钮应该存储在AppDelegate中,但我不知道除了窗口之外添加它的其他视图是什么意思.将其添加到窗口的一个缺点是,当在后台运行应用程序(即电话)时,添加的状态栏填充将按下窗口.一般来说,将它添加到窗口似乎是一个hacky解决方案 - 任何想法?
Can*_*Can 41
是的,将它添加到UIWindow将是非常hacky和挑剔.
如果您使用的是Storyboard和iOS 5.0,那么您应该可以使用容器视图并执行以下操作:
这是另一张图片,展示了第一个View Controller的相当简单的结构:
左侧的视图控制器有一个容器,然后是一个视图,它将按钮放在它上面.容器指示导航控制器(直接向右)应出现在其自身内,该关系由=([])=>
箭头显示(正式称为嵌入segue).最后,导航控制器将其根视图控制器定义为右侧的控制器.
总之,第一个视图控制器在容器视图中使用顶部的按钮进行煎饼,因此内部发生的所有内容都必须将按钮放在顶部.
使用与Storyboard版本类似的结构,您可以使用其按钮创建基本视图控制器,然后添加视图,该视图将成为应用程序的新"根",位于下方.
为了清楚FakeRootViewController
起见,让我们调用一个持有按钮的视图控制器和视图控制器,它实际上是应用程序的根目录:RootViewController
.所有后续的视图控制器甚至都不会知道FakeRootViewController
上面的其他所有人.
// 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)
#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)
这样,你就可以享受在窗口上插入按钮的所有好处,而不会有任何负罪感和"我真的应该成为程序员吗?" 它导致.
归档时间: |
|
查看次数: |
10135 次 |
最近记录: |