Iphone 使用另一个类(和视图)中的按钮调用一个类中的函数(iAction)

Iphone 使用另一个类(和视图)中的按钮调用一个类中的函数(iAction),iphone,cocoa-touch,Iphone,Cocoa Touch,我有一个应用程序,其中我使用了一个带有3个按钮的UITabBarController。所以我也有三节课。我想做的是调用类1(视图1)中的-(iAction)doSomething:(id)sender{},并在类2(视图2)中使用按钮。获取您的doSomething方法(非函数)所做的任何事情,并使用它在新类中创建方法。两个控制器都可以导入类、实例化它并使用该方法 或者,您可以向具有doSomething的任何控制器发送通知,但如果方法中的代码确实适用于两个控制器,请将其提供给两个控制器 您可

我有一个应用程序,其中我使用了一个带有3个按钮的
UITabBarController
。所以我也有三节课。我想做的是调用类1(视图1)中的
-(iAction)doSomething:(id)sender{}
,并在类2(视图2)中使用按钮。

获取您的
doSomething
方法(非函数)所做的任何事情,并使用它在新类中创建方法。两个控制器都可以导入类、实例化它并使用该方法

或者,您可以向具有
doSomething
的任何控制器发送通知,但如果方法中的代码确实适用于两个控制器,请将其提供给两个控制器


您可以让一个控制器向另一个控制器发送通知。当您想要通知class 1执行按钮按下代码时,您将发送如下通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCPerformButtonAction" 
                                                object:nil];
- (void)performDoSomething:(NSNotification *)notif {
    [self doSomething];
}
你不必称它为abcperformbutonaction,你只需要一个你能识别的字符串和一些东西——我使用ABC是因为我不知道你的首字母缩写或应用程序的名称或其他什么——来帮助确保你不会意外地发送一个与你不知道正在侦听的通知同名的通知(包括您正在使用的第三方库等)

当该通知发出时,任何已向defaultCenter注册以侦听@“ABCPerformButtonAction”的对象都将执行您选择的任何操作。以下是控制器1的注册方式(应位于ViewDidLoad或对象的初始化方法等位置):

那里的选择器performDoSomething:,只是在通知发出时要运行的方法的名称。该方法必须具有特定的格式,因此不能直接调用doSomething方法。它的外观如下:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCPerformButtonAction" 
                                                object:nil];
- (void)performDoSomething:(NSNotification *)notif {
    [self doSomething];
}
正如您所看到的,它所做的只是调用方法。显然,它可以做更多的事情,您甚至可以在发送通知的同时发送信息(见下文)

最后,在解除分配对象之前,您还必须将其作为观察者删除。在注册接收通知的每个对象的Dealloc方法中,您添加以下内容:

[[NSNotificationCenter defaultCenter] removeObserver:self];

希望这是有意义的。说明更多,他们提供了几个使用通知的示例应用。

方法右:)。但这有点复杂。让我解释一下。在第二个类中,我有一个方法将一些设置保存到nsarray并保存到plist(当单击按钮时,一切都会发生)。当我从第二个视图切换回第一个视图时,我必须直接使用该设置,而无需执行任何操作。因此,我想在第二个类的方法中添加一些代码,以调用第一个类中获取设置的方法。好的,我添加了一个关于如何发送通知的说明,该通知将执行您想要的操作。