iOS的viewDidLoad中的的UIView(iOS viewDidLoad for UIVie

2019-06-23 16:14发布

在一个视图控制器,有ViewDidLoad当VC加载就知道了。

对于一个UIView,我有什么方法视图加载时使用?

将这种方法与任何初始化调用?

编辑:没有XIB,只是编程。

Answer 1:

如果从XIB文件中加载它,当它从XIB加载的awakeFromNib方法将被调用。

编辑在没有XIB的情况下,你可能会使用来自的观测查看相关的变化区域的方法之一是推断的文档 (例如,didMoveToSuperview)。 然而,更好的方法是将消息发送给从viewDidLoad方法视图控制器的意见。



Answer 2:

Actualy,你没有做视图控制器的方法viewDidLoad中(),您的观点的初始化什么。 所有你想做的事,你可以在视图的init方法做。 例如,在视图控制器的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;
}

然后,从视图这样的控制器创建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...
}

我想,这是你所需要的。

干杯!



Answer 3:

斯威夫特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.
  }
}


Answer 4:

您可以使用willMove(toSuperview newSuperview:UIView的?)

import UIKit

final class myView: UIView {

  override func willMove(toSuperview newSuperview: UIView?) {
     super.willMove(toSuperview: newSuperview)
     //Do stuff here
   }

} 

苹果文档



Answer 5:

我有类似的问题,发现相对简单的解决方案。 想法是送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");

}


Answer 6:

据我所知,我不认为有除了初始化这种方法。 通常我做的init方法的准备。 您可以创建自己viewDidLoad方法和手动调用它。 但大多数时间,UIView的是设法通过它的视图控制器,这样的观点被加载时视图控制器应该知道,如果你想配置来看,你可以做的视图控制器。 顺便说一句,在viewDidLoad方法并不总是叫。



Answer 7:

这并不完全像这样工作。

- (void)viewDidLoad当视图控制器被加载不被调用; 视图控制器的看法时加载它被调用。

所以,你可以创建的UIViewController,以及将被调用的唯一方法是用于初始化它的初始化方法。 该视图将不被创建,则 - (无效)viewDidLoad方法不被调用等

然后,当别的询问其视图,视图控制器,通过:

viewController.view;

视图控制器然后调用:

- (void)loadView; // This is where you put your own loading view information, and set the viewController's self.view property here.

其次是:

- (void)viewDidLoad;

查看有没有负载是一个独立的方法,所以你不必中断实际的loadView方法,以及复杂的视图加载选项。 子类和用笔尖等时,可能会导致问题时,开发者不知道苹果在做什么,他们的最佳实践是什么,所以这是聪明的苹果的方法分离出重写的loadView方法。

然后,当内存警告而来的观点被释放,并设置为nil:

- (void)viewWillUnload;
// view unloaded and set to nil.
- (void)viewDidUnload;


文章来源: iOS viewDidLoad for UIView