从 NIB 加载十几个相同类型的 UIView

Posted

技术标签:

【中文标题】从 NIB 加载十几个相同类型的 UIView【英文标题】:Load a dozen UIView of the same type from a NIB 【发布时间】:2013-02-12 17:14:18 【问题描述】:

这可能是一个愚蠢的问题,但我什么也没找到...... 我偶然发现了一段我认为可以优化的代码。

我有一个包含 24 个注释/帖子的视图控制器。 在 view-did-load-process 过程中会调用以下内容:

 for (int i = 1; i <= 24; i++)

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PostitView" owner:self options:nil];
    for (UIView *subview in nib)
    
        if ([subview isKindOfClass:NSClassFromString(@"PostitView")]) 
        

从笔尖一次又一次地加载 postit 需要很长时间。

我会说,我只是从子视图中复制一份,但它不起作用。那么正确的方法是什么?

谢谢!!! 汤姆

【问题讨论】:

查看这个答案***.com/questions/4036398/… 我在做什么没有区别。显然,在使用 NIB 时这是不可能的。 加载视图需要多长时间? 这需要太长时间(在我和性能分析器看来)。如果我必须只做一次就可以了。但我打算扩展这个视图控制器,所以这些 loadFromNibview 可能会经常发生 您是否尝试将其添加到只有 PostitView 的新 xib 中,然后您不必遍历所有视图, 【参考方案1】:

在循环之前,创建一个代表您的笔尖的UINib 对象。在循环内部,让UINib 实例化自己。

UINib *nib = [UINib nibWithNibName:@"PostitView" bundle:nil];
Class viewClass = [PostitView class];
for (int i = 0; i < 24; i++) 
    NSArray *topLevelObjects = [nib instantiateWithOwner:self options:nil];
    for (UIView *subview in topLevelObjects) 
        if ([subview isKindOfClass:viewClass)  
            ...

【讨论】:

instantiateWithOwner ...这就是我要找的。谢谢老兄!

以上是关于从 NIB 加载十几个相同类型的 UIView的主要内容,如果未能解决你的问题,请参考以下文章

从 NIB 加载 UIView - 帧大小错误

从 nib 文件加载 UIView?

从 Nib 加载的 UIView,手动调用 autolayout

从 nib 加载 UITableViewCell 子类时给出的类型错误

调用 UIView initWithFrame 即使从 NIB 加载 self ? [复制]

从 nib 加载自定义 UIView 会导致无限循环或抛出 nil 异常