Iphone 调用在其他类中声明的IBAction

Iphone 调用在其他类中声明的IBAction,iphone,ios,ios5,Iphone,Ios,Ios5,我正在尝试为iPhone创建一个应用程序,我有一个主viewController和一些其他viewController。这是因为它是一个多视图应用程序 在ViewController.h和ViewController.m文件中,我创建了所有iAction,因为它们将由所有其他视图共享 现在,在firstViewController.m中,我使用以下代码创建了一个自定义按钮: UIButton *settingsButton = [UIButton buttonWithType:UIButtonT

我正在尝试为iPhone创建一个应用程序,我有一个主viewController和一些其他viewController。这是因为它是一个多视图应用程序

在ViewController.h和ViewController.m文件中,我创建了所有iAction,因为它们将由所有其他视图共享

现在,在firstViewController.m中,我使用以下代码创建了一个自定义按钮:

UIButton *settingsButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
settingsButton.frame = CGRectMake(110.0, 360.0, 100.0, 30.0);
[settingsButton setTitle:@"Play" forState:UIControlStateNormal];
settingsButton.backgroundColor = [UIColor clearColor];
[settingsButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal ];
UIImage *buttonImageNormal = [UIImage imageNamed:@"setButtonNormal.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"setButtonPressed.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[settingsButton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:settingsButton];
正如您所看到的,该操作名为“loadSettingsView”,我在ViewController中正确声明了该操作。但它不起作用,这是因为上面的代码在firstViewController.m中,而不是在声明iAction的ViewController.m中。 注意,我已经在ViewController中移动了上述代码,并且操作有效,因此不是操作的问题。问题是,我找不到一种方法来访问在与我正在处理的类不同的类中声明的操作

谁能帮我一下吗


非常感谢

您的问题的答案是您声明按钮操作目标的方式

[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];
如果这段代码位于
firstViewController.m
中,并且您说目标是
self
,这意味着编译器必须在
firstViewController
类中查找该方法。因此,要解决此问题,您需要将按钮操作的
目标指向
viewController
类。顺便说一句,在这一点上,我想提到的是,您的命名很糟糕,如果您的子类
UIViewController
不将其称为
ViewController
,请使其更有意义

实际修复

创建一个全局属性,该属性将指向
ViewController
对象,并将其称为
vc

[settingsButton addTarget:vc action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];

您的问题的答案是您为按钮声明操作目标的方式

[settingsButton addTarget:self action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];
如果这段代码位于
firstViewController.m
中,并且您说目标是
self
,这意味着编译器必须在
firstViewController
类中查找该方法。因此,要解决此问题,您需要将按钮操作的
目标指向
viewController
类。顺便说一句,在这一点上,我想提到的是,您的命名很糟糕,如果您的子类
UIViewController
不将其称为
ViewController
,请使其更有意义

实际修复

创建一个全局属性,该属性将指向
ViewController
对象,并将其称为
vc

[settingsButton addTarget:vc action:@selector(loadSettingsView) forControlEvents:UIControlEventTouchUpInside];

只是一个小问题。指向ViewController的全局属性是什么意思?必须在firstViewController类中具有指向ViewController类的某种链接。如果调用firstViewController作为模式,则可以通过调用[self-parentViewController]引用ViewController,但如果您没有,您应该通过自定义init方法或通过类变量传递到firstViewController的链接,以便以后可以使用它将任何按钮操作指向它。我已经尝试过这种方法,xcode再次给我错误。你能告诉我如何定义这个全局属性吗?因为错误似乎就在那里,我找到了解决办法!!;)只是一个小问题。指向ViewController的全局属性是什么意思?必须在firstViewController类中具有指向ViewController类的某种链接。如果调用firstViewController作为模式,则可以通过调用[self-parentViewController]引用ViewController,但如果您没有,您应该通过自定义init方法或通过类变量传递到firstViewController的链接,以便以后可以使用它将任何按钮操作指向它。我已经尝试过这种方法,xcode再次给我错误。你能告诉我如何定义这个全局属性吗?因为错误似乎就在那里,我找到了解决办法!!;)