我有一个自定义的UIButton类,如下所示:
·H
#import <UIKit/UIKit.h>
@class FriendButton;
@protocol LongPressedButtonDelegate
- (void)buttonIsLongPressed:(FriendButton *)button;
@end
@interface FriendButton : UIButton
@property (nonatomic, weak) id<LongPressedButtonDelegate > delegate;
@end
的.m
@implementation FriendButton
//this is called from the interface builder
-(id) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:(NSCoder *)aDecoder];
NSLog(@"init called");
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
[self addGestureRecognizer:longPress];
return self;
}
-(void)longPress:(id)sender {
NSLog(@"long press");
[self.delegate buttonIsLongPressed:self];
}
@end
我的按钮在界面构建器中设置,它们包含在UITableView单元格中。在我的UITableViewController中,我有:
-(void)buttonIsLongPressed:(FriendButton *)button {
NSLog(@"Delegate method!");
}
并且它的控制器符合协议。长按手势有效但委托方法未被调用。我不确定为什么它不起作用。是因为我必须将每个按钮委托给UITableViewController吗?如果是这样,我该怎么做?按钮在界面构建器中设置。
答案 0 :(得分:2)
以这种方式定义您的UIButton属性
@interface FriendButton : UIButton
@property (nonatomic, weak) IBOutlet id<LongPressedButtonDelegate > delegate;
@end
然后转到Interface Builder并右键单击UIButton,您将看到委托将此委托链接到UITableViewController。它应该工作
答案 1 :(得分:0)
在UITableViewController的cellForRowAtIndexPath
实现中,您需要执行以下操作:
cell.button.delegate = self;
编辑:如果您想以编程方式执行此操作。如果您想在故事板中执行此操作,请参阅IBOutlets周围的答案。