我相信UIView
个对象可以将控制权委托给iOS编程中的视图。但是,我认为这已经由与IBAction
对应的IBOutlet
关联的UIView
处理。
在这种情况下,从我的xib中的UIView
的委托圈到文件所有者拖动蓝线(同时按下Ctrl键)是什么意思?
UIView
是否已通过IBAction
委托给我的视图控制器?如果我没有为UIView
的委托指定任何内容,代码似乎有效。
答案 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
因此委托只是一组定义对象行为的函数,实现它们的类可以改变这种行为。