我已经创建了UIView的自定义子类以及xib文件,并在该自定义类中声明了IBOutlets和IBActions。
@interface ContactUsView : UIView
@property (nonatomic, weak) IBOutlet UIButton *displayCloseButton;
- (IBAction)callButtonPressed:(id)sender;
- (IBAction)emailButtonPressed:(id)sender;
- (IBAction)displayCloseButtonPressed:(id)sender;
@end
在xib文件中,我拖动了一个UIView来代表我的自定义视图。我已经设定:
然后,我添加了与上述3种方法相关的各种按钮。
在ContactUsView.m中,我具有以下内容:
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ContactUsView" owner:self options:nil];
for (id object in array) {
if ([object isKindOfClass:[ContactUsView class]])
self = (ContactUsView *)object;
}
}
return self;
}
当我创建此视图时,请执行以下操作:
- (void)viewWillAppear:(BOOL)animated
{
ContactUsView *contactUs = [[ContactUsView alloc] initWithFrame:CGRectZero];
CGPoint origin = self.view.frame.origin;
CGSize size = self.view.frame.size;
[contactUs setFrame:CGRectMake(origin.x,
CGRectGetMaxY(self.view.frame) - 100,
size.width,
contactUs.frame.size.height)];
[self.view addSubview:contactUs];
}
问题当我按下其中一个按钮时,应用程序崩溃:线程1:EXC_BAD_ACCESS(code = 2,address = 0xb0c
谁能帮我这个。我觉得我可能在从xibs创建和加载自定义uiview方面犯了一个错误。
如果您需要更多信息,请告诉我。非常感谢。
将来的参考使用xib创建自定义视图时,请勿设置文件所有者。而是像平常那样创建所有IBOutlet和IBAction,然后将其连接起来,打开“实用程序”选项卡并控制从此处拖动。
•文件所有者=我的自定义类
错误的。文件所有者应为空。视图本身是文件所有者。这意味着您应将所有动作和插座连接ContactUsView
到xib中。
[[NSBundle mainBundle] loadNibNamed:@“ ContactUsView” owner:self选项:无]
...
自我=(ContactUsView *)对象;
self
作为owner
参数传递后。您更改它。这意味着先前分配的ContactUsView
(self
)将被销毁,因为-loadNibNamed:owner:options:
不保留它。如果您应用我的第一条建议,则应将其nil
作为owner
参数发送
for
此处的循环不是必须使用array[0]
,因为如果xib中具有有效的视图层次结构,则这始终是您的视图
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句