1

我是 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 文件:

在此处输入图像描述

h 文件: 在此处输入图像描述

4

4 回答 4

3

我假设您为此项目启用了 ARC。

当您从didFinishLaunchingWithOptions:分配给的对象返回时,btn将被释放,因为您将其分配给仅在该方法中定义的局部变量。BtnView *btn为您的班级创建一个属性,strong它应该留在周围以处理按钮按下。(记得self.btn在引用它时使用。)

(但是,我很好奇,为什么不首先将按钮放在主视图上,然后不用担心额外的控制器和子视图?)

于 2012-06-28T11:14:15.813 回答
0
- (IBAction)touched

尝试不使用发件人

于 2012-06-28T11:00:28.913 回答
0

在 .xib 文件中,您可以将按钮连接到文件的所有者。

1) 右键单击​​按钮。然后会出现一个窗口。您可以Touch Up Inside在该窗口中看到并单击小圆圈并拖动到文件所有者并连接到touched. 我想这会对你有所帮助。

于 2012-06-28T11:02:51.720 回答
0

是否有任何特定原因需要整个 UIViewController 成为按钮?执行此操作的常规方法是将 UIViewController 作为控制器,然后将 UIButton 作为其视图的子视图放在 viewDidLoad 方法中,将其连接到所需的方法,甚至在需要时将其放在整个屏幕上。如果您需要自定义外观,您也可以使用 UIButton 来实现。

于 2012-06-28T11:20:54.480 回答