从 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,手动调用 autolayout
从 nib 加载 UITableViewCell 子类时给出的类型错误