这是我的第一个iOS项目。我只是在我的XCode应用程序中的代码学习中试用了iOS的教程。
我在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:
按预期点击。初始化视图时,我希望viewDidLoad能够运行。我可能只是误解了C“发送消息”的方式。
如果有任何其他信息可能会有所帮助,请告诉我们。感谢您的帮助:))
这与故事板有关吗?我处于故事板模式但我从未使用GUI添加任何按钮
答案 0 :(得分:1)
由于您正在创建其视图的非标准方式,因此未调用viewDidLoad。通常,视图是从xib或storyboard加载的,或者是在视图控制器的loadView方法中的代码中创建的 - 在所有这些情况下,都将调用viewDidLoad。如果将视图创建移动到控制器的.m文件中的loadView,它将起作用,并且将调用viewDidLoad。
编辑后:
如果您正在使用故事板,那么您的视图应该在那里创建,而您不应该在应用程序委托中执行您正在执行的操作。实际上,当您使用故事板时,通常在应用程序中没有任何代码:didFinishLaunchingWithOptions:method。
答案 1 :(得分:1)
...
self.viewController.view = view;
...
你不应该在viewDidLoad之前设置viewController的视图,这会导致viewDidLoad没有被调用。应该在viewDidLoad中设置视图,viewController将自动为您管理其视图。
答案 2 :(得分:0)
查看代码,这正是应该发生的事情。创建viewController时,它会自动创建一个视图,因此您不希望为其创建新视图。您的按钮没有显示,因为它位于使用viewController创建的原始视图上,但是您用黄色视图覆盖了它。
相反,您想要做的是进入ViewController.m
的{{1}}并添加:
viewDidLoad:(BOOL)animated
另外,请确保未在appDelegate中设置viewController.view。如果您未设置该视图,则会自动创建视图,您可以在viewDidLoad中向其添加按钮或任何其他视图。
答案 3 :(得分:0)
我遇到了这个问题,当我在AppDelegate的didFinishLaunchingWithOptions函数中添加了一些代码时,调用了initWithCoder函数。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];(NSDictionary *)launchOptions
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MyStoryboardName" bundle:nil];
UIViewController *initViewController = [storyboard instantiateInitialViewController];
[self.window setRootViewController:initViewController];