簡體   English   中英

具有自定義初始化的自定義UIView不起作用

[英]Custom UIView with custom initialization doesn't work

我正在使用最新的SDK開發iOS應用。

我創建了一個從UIView繼承的類,每次實例化該類時都必須進行一些初始化。

我必須調用一個名為setUpVars:的方法setUpVars:但是我不知道將消息發送到該方法的位置:

- (id)initWithFrame:(CGRect)frame;
- (id)initWithCoder:(NSCoder*)aDecoder;

此類可以與自定義xib一起使用,也可以添加到Storyboard中,因此我需要確保在每種情況下都將調用該方法。

- (void)setUpVars
{
    _preferenceKey = @"";
    _preferenceStatus = NO;
    _isDown = NO;
}

我必須在哪里添加[self setUpVars];

本質上,您將要涵蓋這兩種情況

- (id)initWithFrame:(CGRect)frame;
{
  self = [super initWithFrame:frame];
  if (self) {
    [self setUpVars];
  }
  return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder;
{
  self = [super initWithCoder:aDecoder];
  if (self) {
    [self setUpVars];
  }
  return self;
}

我認為您需要從每個方法發送此消息,也不要忘記awakeFromNib方法。

您可以創建BOOL變量(類似於isAlreadySetup ,然后在setUpVars方法中將其設置為YES

如果使用Interface Builder設計界面,則隨后從nib文件加載視圖對象時,不會調用initWithFrame 而是調用initWithCoder 因此,如果您喜歡通用方法,則可以在兩種方法中初始化變量。 在兩種情況下均有效

Docs說

awakeFromNib

從Interface Builder檔案或nib文件中加載接收器后,為接收器做准備。

- (void)awakeFromNib
{
 [self setUpVars];
}

我傾向於認為您應該從負責控制器的-(void)viewDidLoad方法調用此方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM