在我的xib文件中委托给文件所有者是什么意思?

时间:2012-04-02 01:50:08

标签: objective-c ios cocoa-touch uiview interface-builder

我相信UIView个对象可以将控制权委托给iOS编程中的视图。但是,我认为这已经由与IBAction对应的IBOutlet关联的UIView处理。

在这种情况下,从我的xib中的UIView的委托圈到文件所有者拖动蓝线(同时按下Ctrl键)是什么意思?

UIView是否已通过IBAction委托给我的视图控制器?如果我没有为UIView的委托指定任何内容,代码似乎有效。

3 个答案:

答案 0 :(得分:2)

  

UIView是否已通过IBAction委托给我的视图控制器了?如果我没有为UIView的委托指定任何内容,代码似乎有效”

看起来你会混淆Target-Action Mechanism与委托的想法。虽然您可以在某种程度上将目标操作视为涉及“委托”,但它只是在最一般意义上的单词,因为它是处理和实现操作(消息)的目标(通常是控制器)。但是,Cocoa程序员可能不会通过使用特定的单词 - 委托来解释目标 - 行动机制,因为它太容易将它与实际的Delegation混淆。

当您在nib文件中“连接”按钮和控件以调用控制器对象中的IBAction方法时,这只是工作中的目标操作机制。正如您所看到的,即使您“没有为我的UIView委托指定任何内容”,代码也能正常工作,因为目标操作不涉及委派(在Cocoa的意义上)。

委托通常被用作使用子类来实现所需行为的更简单的替代方法。例如,您不必创建自己的UITableView自定义子类,以便让它知道您希望它显示哪些数据,而只需使用普通UITableView类,设置其{{1}控制器类,并让控制器类实现所需/所需的指定委托方法。使用子类来实现这一点可能会变得复杂,因为当你进行子类化时,你需要完全理解继承链以及所有超类的工作原理。

答案 1 :(得分:1)

文件的所有者只是伪装XIB从中引用它的类名称的一种奇特方式。当您将代理出口拖到您的班级时,它就相当于这一行:

[self.myControl setDelegate:self];

答案 2 :(得分:1)

当您将CNTRL从IBOutlet或IBAction按到UILabel,UIButton或其他东西的同时拖动时,您将事件或插座绑定到控制器。

一种委托类型的控制器,必须根据它的委托类型实现特定的功能。例如,实现UIViewDelegate协议的UIViewController可以实现

    -(void)viewDidLoad

实现UIApplicationDelegate的YourApplicationDelegate必须实现

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

因此委托只是一组定义对象行为的函数,实现它们的类可以改变这种行为。