IB を使用せずに、ラベルを含むビューを表示する基本的なテスト アプリをセットアップしました。カスタム UIView サブクラスとカスタム UIViewController サブクラスを使用したいと考えています。
これは予想どおりに実行されますが、MyViewController の viewWillAppear および他の同様のデリゲートは起動しません。
これらの火をつけるために何が欠けていますか?以前のプロジェクト (IB を使用) では、これらは問題なく起動しました。
完全なコードは次のとおりです。
AppDelegate - 「MainVC」ビュー コントローラをロードし、ルート コントローラとして設定します
#import "AppDelegate.h"
#import "MainVC.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize mainVC = _mainVC;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.mainVC = [[MainVC alloc] init];
self.window.rootViewController = self.mainVC;
[self.window makeKeyAndVisible];
return YES;
}
MainVC - 「MyView」を割り当てる「MyViewController」を作成します (ビューに使用するフレーム サイズも渡します)。
#import "MainVC.h"
#import "MyViewController.h"
@implementation MainVC
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
MyViewController *controller = [[MyViewController alloc] init];
CGRect frame;
frame.origin.x = 5;
frame.origin.y = 5;
frame.size.width = self.view.frame.size.width - (2 * 5);
frame.size.height = self.view.frame.size.height - (2 * 5);
controller.startingFrame = frame;
[self.view addSubview:controller.view];
}
return self;
}
MyViewController - MyView を作成します
#import "MyViewController.h"
#import "MyView.h"
@implementation MyViewController
@synthesize startingFrame;
- (void)loadView{
self.view = [[MyView alloc] initWithFrame:startingFrame];
}
- (void)viewWillAppear:(BOOL)animated{
NSLog(@"appearing"); //doesn't do anything
}
- (void)viewDidAppear:(BOOL)animated{
NSLog(@"appeared"); //doesn't do anything
}
私の見解
#import "MyView.h"
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 150, 40)];
[label setText:@"Label"];
[self addSubview:label];
}
return self;
}