2

我已经以编程方式创建了 UIButton ,它被添加到也是以编程方式创建的 UIViewController 中。我不知道作为 AddTarget 传递什么。

我目前已在 addtarget 中传递 optionView.self

 UIWindow *window1 = [[UIApplication sharedApplication] keyWindow];
   optionView  = [[UIViewController alloc]init];
   optionView.view.frame=CGRectMake(0, 0, 960, 640);
   UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
   button.frame=CGRectMake(0, 0, 200, 100);
   [button setTitle:@"Press Me" forState:UIControlStateNormal];
   [button addTarget:optionView.self action:@selector(buttonClicked:)  forControlEvents:UIControlEventTouchUpInside];
   [optionView.view addSubview:button];
   [window1 addSubview: optionView.view];

这也是我的选择器方法

-(IBAction)buttonClicked:(id)sender{

    NSLog(@"This works");

}

而且我也收到以下错误

无法识别的选择器发送到实例 0x1fd7b600'

请不要说我正在使用 Unity3d 游戏引擎。此代码在(Unity3d 在 APPController.mm 中)

4

4 回答 4

1

如果您buttonClicked:在设置目标的同一类中有方法,则它应该self代替optionView.self.

于 2012-10-23T11:28:01.693 回答
1

您的 ViewControlleroptionView没有 buttonClicked 选择器,这就是应用程序崩溃的原因。

如果需要,您可以从 ViewController 创建子类,在那里实现您的方法并创建 optionView 作为新类的实例。然后它将响应呼叫。

或者另一种方式 - 您可以通过使用buttonClicked选择器为其创建类别来扩展基本 ViewController 类。

于 2012-10-23T11:40:12.610 回答
0

最好在optionView中创建此按钮,而不是在应用程序委托中,应用程序崩溃,因为它将在 optionView 中找到 buttonClicked 方法,而 optionView 中还没有任何方法。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(0, 0, 200, 100);
[button setTitle:@"Press Me" forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonClicked:)  forControlEvents:UIControlEventTouchUpInside];
[self.window addSubview: button];
[self.window makeKeyAndVisible];
return YES;

}

于 2012-10-23T11:32:11.007 回答
0

我想目标应该optionView改为optionView.self

于 2012-10-23T11:42:44.203 回答