objective-c - Obj C 委托(delegate)方法未分配给 UIButton (iOS)?

标签 objective-c ios cocoa-touch

我正在尝试使用 addTarget:action:forControlEvents: 将委托(delegate)的方法分配给 UIButton。一切都在没有警告的情况下编译,IBOutlet 连接到 Interface Bulder (XCode 4) 中的按钮。如果我将委托(delegate)的方法移动到 Controller ,它就可以正常工作。 (所有代码都运行良好,但我重构为使用委托(delegate),这是我第一次尝试使用委托(delegate)和协议(protocol)。)

(添加)协议(protocol)声明,放在.h中的@interface之前:

@protocol MMGLVDelegate<NSObject>
  -(void)receiveQuitRequest:(id)sender;
@end

在 Controller 界面中,这些属性:

@property (nonatomic, assign) id<TheDelegateProtocol> delegate;
@property (nonatomic, retain) IBOutlet UIButton *quitBtn;

在 Controller 实现中:

-(void)setDelegate:(id<MMGLVDelegate>)delegate {
  DLog(@"MMGLVSegmented setDelegate: Entered");
  _delegate = delegate;

  [self.quitBtn addTarget:self.delegate action:@selector(receiveQuitRequest:) 
                                   forControlEvents:UIControlEventTouchUpInside];
}

感谢任何帮助。将目标更改为 self.delegate、_delegate 或 delegate 中的任何一个都不会更改应用程序行为。

我希望做的是不必声明一个类 receiveQuitRequest: 然后传递给委托(delegate),我宁愿直接从控件转到委托(delegate)。

最佳答案

我觉得你应该写

[self.quitBtn addTarget:delegate action:@selector(receiveQuitRequest:) 
                                   forControlEvents:UIControlEventTouchUpInside];

我不确定,但这可能适用于你的情况

关于objective-c - Obj C 委托(delegate)方法未分配给 UIButton (iOS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707062/

相关文章:

objective-c - Iphone:在单独的文件中编写一些方法以便从任何地方访问

ios - 如何在 ios 的歌曲加载时间中显示或隐藏事件指示器

iphone - 如何判断 UIView 是否可见并显示在屏幕上?

objective-c - 将 NSImage 导出到 Excel 工作表

iphone - 如何在 Objective C 中绘制饼图

objective-c - 创建依赖关系图时发生内部错误 : ASSERTION FAILURE

iphone - 如何在 Objective C 中使用静态变量(BOOL)

ios - Swift:将文件导入桥接 header 时出现段错误 11

iphone - 如何使用代码在 ios 应用程序中录制屏幕视频?

ios - 在 iphone 上删除 Beta 测试 (testflight) 应用程序