0

在 Master-Detail Xcode 模板中,我在哪里定义一个可以全局访问的函数(所有 UIViewController 及其子类)?

4

4 回答 4

2

UIViewController一种可能性:您可以使用该方法定义一个类别。所以UIViewController现在任何人也有这种方法。

另一种可能性:子类 aUIViewController并在那里编写你的方法。然后从这个自定义视图控制器子类化。

编辑:

另外,我的 MasterViewController 是 UITableViewController 的子类,而 DetailViewController 是 UIViewController 的子类。如果我将它们都子类化为自定义 UIViewController,则 MasterViewController 将失去其 UITableViewController 继承

您可以将 a 子类化并从 thisUITableViewController中对 and 子类执行相同的操作。UIViewController

基本思想是将 aUITableViewController和 aUIViewController作为模板。

于 2012-05-26T21:16:09.793 回答
2

您可以在 appDelegate 类中创建可以通过所有应用程序访问的方法。例如,在您的 AppDelegate.h 中,您已声明此方法如下:

-(void)myMethod;

在您的 AppDelegate.m 中,您将其定义为:

-(void)myMethod
{
    NSLog(@"myMethod is getting called");
}

从任何其他类(Master 或 Detail 等),您可以通过以下方式访问 myMethod:

#import "AppDelegate.h"

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate myMethod];
于 2012-05-27T18:14:11.153 回答
1

使类和方法成为静态的。使用加号而不是减号,例如+(void)methodName:param(ParamType *);

请注意,您不能实例化此类的对象。这就像过程编程。如果我在不同的对象和视图中需要相同但不断变化的值,我通常会使用它。不过,我没有更好的方法对我有用。

于 2012-05-27T00:44:08.897 回答
0

如果您有一些代码不关心什么类的对象调用它,它可能被封装到函数或子例程而不是方法中。

方法是了解对象及其类的特殊类型的函数或子例程。函数或子例程就像一个全局方法,但没有。

补充:Objective C 是 C 编程语言的超集。因此,两种语言中的 C 函数和子例程都是相同的。您可以在(或任何).c 或 .m 文件中编写一个,然后在 .h 文件中声明它以包含在您希望使用的任何位置。根据需要传递参数并从函数中获取返回值,就像方法一样(除了与任何固有的对象类无关)。

添加#2:但是由于您希望您的方法了解一些 NSStream,那么它可能应该是包含这些流的某个模型类(MVC 范式)的方法,而不是真正的全局方法。将此模型对象传递给任何需要访问它的视图控制器或其他类。

于 2012-05-26T21:28:19.813 回答