在 xib 文件中使用拖放时将调用 UIView 的哪个 init 方法

Posted

技术标签:

【中文标题】在 xib 文件中使用拖放时将调用 UIView 的哪个 init 方法【英文标题】:Which init method for UIView will be called when using drag and drop in xib file 【发布时间】:2014-09-28 05:18:43 【问题描述】:

这里是自定义集合视图,标签下方是(我设计的评级视图)。

    - (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 

        [self initGrayStarView];

        [self initYellowStarView];

        [self initRatingLabel];
    
    return self;

但我发现每次评分视图都没有出现(图像视图和标签出现)。然后我发现是因为我没有调用评级视图的init方法,所以它是nil,但是为什么呢? 这是init方法。

但它从不调用它,它只调用 layoutSubview 方法。

【问题讨论】:

在故事板调用 initWithCoder 中创建的视图: How to write init method for custom UIView class with xib file的可能重复 【参考方案1】:

考虑这种模式...

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


-(id)initWithCoder:(NSCoder *)aCoder 
    if (self = [super initWithCoder:aCoder]) 
        [self _setup];
    
    return self;


-(void)_setup 
    blah;
    blah;
    blah;

尝试“了解正在发生的事情”,但如果您刚刚开始,这将帮助您度过难关。希望对你有帮助

【讨论】:

虽然我已经找到了解决问题的方法,但这比我想要的要多,我真的帮了很多忙。【参考方案2】:

它在 awakeFromNib: 方法中。在您的实现文件中覆盖它,如下所示:

- (void)awakeFromNib 
  [super awakeFromNib];
  // Initialization code
  [self setupStuff];

【讨论】:

以上是关于在 xib 文件中使用拖放时将调用 UIView 的哪个 init 方法的主要内容,如果未能解决你的问题,请参考以下文章

使用html5拖放时滚动[重复]

在ANDROID中相互拖放时合并Recyclerview中的项目?

拖放时滚动(WPF)

在使用拖放时,我可以让 Treeview 展开用户悬停的节点吗?

Qt - 在QGraphicScene中拖放时如何从项目中获取文本?

拖放时吞下异常