Van*_*nel 18 objective-c uiview ios
我正在使用最新的SDK开发iOS 5+应用程序.
我创建了一个TopMenuView带有自定义XIB 的自定义UIView().在Interface Builder上,我已经在这个XIB上更改了UIView类TopMenuView.我没有设置任何File's Owner.
在TopMenuView.m我有:
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
NSLog(@"init with coder: %d", counter);
counter++;
// Add custom XIB
NSArray *topMenuView = [[NSBundle mainBundle] loadNibNamed:@"TopMenuView"
owner:nil
options:nil];
UIView *nv = [topMenuView objectAtIndex:0];
[self addSubview:nv];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
使用Interface Builder我添加了UIViewa UIViewController并将此类更改UIView为TopMenuView.
但是,当我运行应用程序时,我收到4251次此日志消息:
2013-10-13 20:49:34.078 MyProject[470:c07] init with coder: 0
然后,我得到一个EXC_BAD_ACCESS:
NSArray *topMenuView = [[NSBundle mainBundle] loadNibNamed:@"TopMenuView"
owner:nil
options:nil];
Run Code Online (Sandbox Code Playgroud)
JYe*_*Yeh 59
它多次调用initWithCoder的原因是由于.xib文件中的类设置错误.
确保文件所有者上的自定义类是您的自定义UIView类:
并确保根视图上的类是默认的UIView:
现在,这就是您在自定义类中所需的全部内容(在Swift中):
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let view = NSBundle.mainBundle().loadNibNamed("TopMenuView", owner: self, options: nil)[0] as! UIView
self.addSubview(view)
view.frame = self.bounds
}
Run Code Online (Sandbox Code Playgroud)
Seb*_*ddd 10
你最有可能进入无限循环,因为你是递归调用的initWithCoder.一种解决方法是首先检查您的子类是否包含任何子视图.
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
if (self.subviews.count == 0) {
NSArray *topMenuView = [[NSBundle mainBundle] loadNibNamed:@"TopMenuView" owner:nil options:nil];
UIView *nv = [topMenuView objectAtIndex:0];
[self addSubview:self.view];
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我就是这样做的:
//Add Custom View to my main view of viewcontroller
self.customNavView = [[CustomNavigationView alloc] init];
self.customNavView = [[[NSBundle mainBundle] loadNibNamed:@"CustomNavigationView" owner:self options:nil] objectAtIndex:0];
[self.customNavView setFrame:CGRectMake(0, 20, 320, 54)];
[self.view addSubview:self.customNavView];
Run Code Online (Sandbox Code Playgroud)
这里 CustomNavigationView 是一个 UIView 子类,其中文件所有者类为 UIView,UIView 自定义类为 CustomNavigationView。
这对我有用。
| 归档时间: |
|
| 查看次数: |
13083 次 |
| 最近记录: |