为什么没有self.view

时间:2010-05-29 16:24:53

标签: iphone objective-c cocoa-touch

我在主视图控制器中有这个代码,它正常工作,正如我想的那样。

loadingActionSheet = [[UIActionSheet alloc] initWithTitle:@"Posting To Twitter..."
                                                 delegate:nil
                                        cancelButtonTitle:@"Cancel"
                                   destructiveButtonTitle:nil 
                                        otherButtonTitles:nil];

[loadingActionSheet showInView:self.view];

我希望代码可以从项目的不同部分重用,所以我将它移到一个单独的文件中(基于UIView)。

我面临的问题是那里没有自我观点,我不知道为什么因为我在学习而且我不太了解我所缺少的东西。

我必须做什么/添加/更改才能在当前视图中显示操作表,即使该代码位于其他位置?

2 个答案:

答案 0 :(得分:3)

听起来你还不太了解Objective-C和面向对象编程。

self就像其他OO语言中的this一样。也就是说,在执行方法时,方法中的self变量是与实现该方法的Class或Subclass实例进行通信的一种方法。

如果self的类没有view属性,则self.view将无法编译。即使它确实具有view属性,也可能不是正确的视图!

我建议你阅读并重新阅读Objective-C guide几次(我在可可开发的前五年每年阅读一次 - 无论如何都是Cocoa的前身)。

一旦你了解Objective-C,你就需要考虑你的应用程序是如何组合在一起的。特别是所有物体如何连接在一起。或者,更具体地说,当您将应用程序分解为单独的文件时,这些文件定义了哪些类以及这些类的实例如何在应用程序中组合在一起?

答案 1 :(得分:0)

你的意思是这样的吗?:

void actionSheetShownIn(UIView *target) {
  UIActionSheet *loadingActionSheet = [[UIActionSheet alloc] initWithTitle:@"Posting To Twitter..."
                                             delegate:nil
                                    cancelButtonTitle:@"Cancel"
                               destructiveButtonTitle:nil 
                                    otherButtonTitles:nil];

  [loadingActionSheet showInView: target];
}