til*_*tem 20 iso uiviewcontroller uiview nib uistoryboard
我有一个UIView,我想在几个视图控制器中使用,所以我创建了视图(.h/.m)和一个nib文件.在Storyboard视图中添加为视图控制器的子视图,但未加载nib中定义的布局.
是否可以为故事板中的视图控制器中使用的UIView加载nib?
Ant*_*nko 18
如果您在编辑Storyboard时询问是否在Interface Builder中看到.xib内容,则无法实现.但是如果你需要在运行时加载它,它是可能的.
@property (strong, nonatomic) IBOutlet UIView* view;View容器并将其从Interface Builder连接到此字段(Ctrl +单击 View并view在.h中将连接拖到上面的属性
- (void)awakeFromNib {
NSString* nibName = @"Place here your Nib name without extension";
if ([[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]) {
[self.view setFrame:[self bounds]];
[self addSubview:self.view];
}
}
就这样.将View移至Storyboard场景,将Custom Class更改为FooView,在View Controller代码中导入.h并根据需要使用IBOutlets.
有快乐的编码
编辑
我想要注意,根据awakeFromNib 文档,我们应该避免使用这些代码awakeFromNib.
建议您在File的Owner对象及其关联的nib文件之间保持一对一的对应关系.使用相同的File的Owner对象加载两个nib文件会导致该对象的awakeFromNib方法被调用两次,这可能导致某些数据结构以不希望的方式重新初始化.还建议您避免从awakeFromNib方法实现中加载其他nib文件.
小智 10
命名您的视图ViewInNib,然后我们有:
在你的故事板中,placeholder在视图控制器中放置一个UIView组件,记得设置它的类ViewInNib,然后在ViewInNib.m:
static BOOL isReplaced = NO;
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder
{
if (!isReplaced)
{
isReplaced = YES;
ViewInNib *replaced = [[[NSBundle mainBundle] loadNibNamed:@"ViewInNib" owner:nil options:nil] lastObject];
replaced.frame = self.frame;
replaced.translatesAutoresizingMaskIntoConstraints = NO;
return replaced;
}
isReplaced = NO;
return self;
}
Run Code Online (Sandbox Code Playgroud)
在这个方法中,我们用storyboard中的视图替换从nib加载的实际视图.希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
12894 次 |
| 最近记录: |