这是我的第一个 iOS 项目。我只是在我的 XCode 应用程序中按照 Try iOS at codeschool 中的教程进行操作。
我在我的 viewDidLoad
方法中添加了一个按钮。我不认为这是通常添加它的地方,但它应该仍然有效。问题是,该方法从未被调用。到目前为止,这是我的代码:
AppDelegate.m:
#import "AppDelegate.h"
#import "ViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Set window size & background color
CGRect viewRect = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame:viewRect];
self.viewController = [[ViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:viewRect];
view.backgroundColor = [UIColor yellowColor];
self.viewController.view = view;
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
NSLog(@"Screen is %f tall and %f wide", viewRect.size.height, viewRect.size.width);
return YES;
}...
AppDelegate.h:
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
ViewController.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
UIButton *firstButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
firstButton.frame = CGRectMake(100, 100, 100, 44);
[firstButton setTitle:@"Don't Click!" forState:UIControlStateNormal];
[self.view addSubview:firstButton];
}...
当应用程序启动并运行时,我的背景仍然是黄色,并且没有可见的按钮。
单步执行应用程序,didFinishLaunchingWithOptions:
按我的预期命中。当 View 初始化时,我希望 viewDidLoad 运行。我可能只是误解了 C“发送消息”的方式。
如果任何其他信息可能有帮助,请告诉我。感谢您的帮助:)
编辑
这和 Storyboard有关系吗?我处于 Storyboard模式,但我从未使用 GUI 添加任何按钮
最佳答案
viewDidLoad 未被调用,因为您创建其 View 的方式不标准。通常, View 是从 xib 或 Storyboard加载的,或者是在 View Controller 的 loadView 方法中用代码创建的——在所有这些情况下,将调用 viewDidLoad。如果您将 View 创建移动到 Controller 的 .m 文件中的 loadView,它将起作用,并且将调用 viewDidLoad。
编辑后:
如果您使用的是 Storyboard,您的 View 应该在那里创建,并且您不应该在应用程序委托(delegate)中执行您正在执行的操作。事实上,当您使用 Storyboard时,application:didFinishLaunchingWithOptions: 方法中通常没有任何代码。
关于ios - 没有为 rootViewController 调用 viewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178177/