以编程方式设置视图

Posted

技术标签:

【中文标题】以编程方式设置视图【英文标题】:Setting the view programmatically 【发布时间】:2016-07-08 12:16:18 【问题描述】:

我正在尝试在不使用 xcode 中的情节提要和目标 c 的情况下设置我的项目。

我的应用代理:

.h

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

.m

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    ViewController *vc = [[ViewController alloc] init];
    self.window.rootViewController = vc;
    return YES;


etc...

我的 viewController 文件:

.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];


我认为我的代码是正确的,当我运行它时我们应该有一个红屏,但我只得到一个黑屏。有人可以告诉我我是否忘记了什么或者与项目设置有关。谢谢。

【问题讨论】:

我不知道可视化调试器,但我现在正在阅读它。但是,我刚刚在我的 viewDidLoad 中添加了一个 NSLog 并且它没有被调用。为什么是这样?我想到了这条线:'self.window.rootViewController = vc;'自动调用上述方法??交易 【参考方案1】:

添加

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

致您的application:didFinishLaunchingWithOptions:

【讨论】:

【参考方案2】:

您缺少两个步骤。

    初始化窗口:

    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
    

    使窗口键 & 可见:

    [self.window makeKeyAndVisible];
    

总而言之,您的代码应该如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

    // Initialize the window
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

    // Add the view controller to the window
    ViewController *vc = [[ViewController alloc] init];
    self.window.rootViewController = vc;

    // Make window key & visible
    [self.window makeKeyAndVisible];

    return YES;

【讨论】:

以上是关于以编程方式设置视图的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置根视图控制器?

以编程方式从集合视图下方设置标签约束

以编程方式设置视图

如何以编程方式设置子视图的框架以使其适合其父视图?

Android以编程方式设置视图边距

如何在 Objective C 中以编程方式设置集合视图?