我是Objective C的初学者。
目前我尝试在主窗口中显示视图。该视图包含一个按钮。出于某种原因,单击此按钮xcode会引发错误。
希望你能帮助我理解我做错了什么。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
BtnView *btn = [[BtnView alloc] init];
[self.window addSubview:btn.view];
[self.window makeKeyAndVisible];
return YES;
}
我的按钮视图的viewController有一个用于识别触摸事件的动作 h文件:
- (IBAction)touched:(id)sender;
并在m文件中
- (IBAction)touched:(id)sender {
//actions ...
}
通过触摸按钮,我收到以下错误:
怎么了?
m file:
h文件:
答案 0 :(得分:3)
我假设你为这个项目启用了ARC。
当您从didFinishLaunchingWithOptions:
返回时,将释放分配给btn
的对象,因为您将其分配给仅在该方法中定义的局部变量。使BtnView *btn
成为您班级的strong
属性,它应该留在处理按钮按下。 (请记住在引用它时使用self.btn
。)
(但是,我很好奇,为什么不首先将按钮放在主视图上,然后再担心额外的控制器和子视图?)
答案 1 :(得分:0)
- (IBAction)touched
尝试不使用发件人
答案 2 :(得分:0)
在.xib文件中,您可以将按钮连接到文件的所有者。
1)右键单击按钮。然后会出现一个窗口。您可以在该窗口中看到Touch Up Inside
,然后点击小圆圈并拖动到文件的所有者并连接到touched
。我认为这会对你有所帮助。
答案 3 :(得分:0)
你有什么特别的理由要求整个UIViewController成为一个按钮吗?执行此操作的传统方法是将UIViewController作为控制器,而不是将UIButton作为子视图放在viewDidLoad方法的视图中,将其连接到所需的方法,如果需要,甚至可以将其放在整个屏幕上。如果您需要自定义外观,也可以使用UIButton进行自定义。