ViewControllerには、VCがロードされたときを知るためのViewDidLoad
があります。
UIViewの場合、ビューがロードされたときにどのメソッドを使用する必要がありますか?
このメソッドはinitで呼び出されますか?
編集:XIBなし、プログラムでのみ。
XIBファイルからロードする場合、XIBからロードするときにawakeFromNibメソッドが呼び出されます。
editXIBがない場合、おそらくObservingのメソッドのいずれかを使用して推論する必要があります。 ドキュメント のビュー関連の変更エリア(didMoveToSuperviewなど)。ただし、より良い方法は、viewDidLoadメソッドでView Controllerからビューにメッセージを送信することです。
実際には、ビューの初期化のために、View ControllerのメソッドviewDidLoad()で何もする必要はありません。やりたいことはすべて、ビューのinitメソッドで実行できます。たとえば、View ControllerのviewDidLoad()には、初期化コードがいくつかあります。
- (void)viewDidLoad{
[super viewDidLoad];
// init your parameters here
}
同様に、ビューのinitメソッドで:
- (id)initWithDelegate:(id)_delegate
{
self = [[[[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil] objectAtIndex:0] retain];
if (self) {
[super init];
self.delegate = _delegate;
// init your parameters here
return self;
}
return nil;
}
次に、View Controllerから次のようにYourViewを作成します。
YourView view = [[YourView alloc] initWithDelegate:self];
[self.view addSubview:view];
[view release];
さらに、ビューがロードされたときに実行したいことは、次のようにビューのlayoutSubviewsメソッドに配置できます。
-(void)layoutSubviews{
[super layoutSubviews];
// init your parameters here, like set up fonts, colors, etc...
}
それがあなたが必要とするものだと思います。
乾杯!
Swift 2:
import UIKit
class myView: UIView {
override func layoutSubviews() {
print("run when UIView appears on screen")
// you can update your label's text or etc.
}
}
WillMove(toSuperview newSuperview:UIView?)を使用できます
import UIKit
final class myView: UIView {
override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
//Do stuff here
}
}
同様の問題があり、比較的簡単な解決策が見つかりました。適切なタイミングでviewDidLoadをすべての子ビューに送信し、目的のクラスでそのメソッドをオーバーロードするというアイデアです。
これを行うには、クラスにコードのこの部分を追加します...
// UIViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view viewDidLoad];
}
// UIView+Loading.m
#import < UIKit/UIKit.h>
@implementation UIView (Loading)
- (void)viewDidLoad
{
for (UIView* subview in self.subviews)
[subview viewDidLoad];
}
@end
// UIView+Loading.h
#import < UIKit/UIKit.h>
@interface UIView (Loading)
- (void)viewDidLoad;
@end
// UIView_CustomImplementation
- (void)viewDidLoad
{
NSLog(@"Do whatever you want to do in custom UIView after method viewDidLoad on UIViewController was called");
}