自定义委托不调用UITableViewController方法

时间:2015-02-18 18:12:10

标签: ios objective-c xcode uitableview

我有一个自定义的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吗?如果是这样,我该怎么做?按钮在界面构建器中设置。

2 个答案:

答案 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周围的答案。