使用 xib 将手势添加到 UICollectionViewCell 子视图

Posted

技术标签:

【中文标题】使用 xib 将手势添加到 UICollectionViewCell 子视图【英文标题】:Add Gesture to UICollectionViewCell subview with xib 【发布时间】:2014-02-16 12:05:12 【问题描述】:

我正在尝试使用 xib 向 UICollectionViewCell 的子视图添加手势,我正在这样做:

.h

@interface MyCell : UICollectionViewCell <UIGestureRecognizerDelegate> 

@property (weak, nonatomic) IBOutlet UIView *containerButton;

@end

.m

@implementation MyCell

- (id)initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];
    if (self) 
        [self initialize];
    
    return self;


- (void)initialize

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [panGestureRecognizer setDelegate:self];

    if (self.containerButton) 
        NSLog(@"ok"); //not enter here
        [self.containerButton addGestureRecognizer:panGestureRecognizer];
    


-(void)prepareForReuse 
    [super prepareForReuse];
    if (self.containerButton) 
        NSLog(@"ok 2");
    

我已经创建了与xib文件连接的UICollectionViewCell子类,在这里我创建了容器按钮视图,如果我尝试在initialize方法中添加手势,containerButton为nil,所以不起作用,但是在prepareForReuse 方法不为空,我可以在那里添加手势吗?或者我可以在其他地方做吗?

【问题讨论】:

【参考方案1】:

试试这个:

- (void)awakeFromNib

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
    [panGestureRecognizer setDelegate:self];

    if (self.containerButton) 
        NSLog(@"ok"); //not enter here
        [self.containerButton addGestureRecognizer:panGestureRecognizer];
    

【讨论】:

以上是关于使用 xib 将手势添加到 UICollectionViewCell 子视图的主要内容,如果未能解决你的问题,请参考以下文章

在 XIB 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”

Xib给特定view添加手势

iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)

将 UITapGestureRecognizer 添加到 XIB

UICollectionView:将单击手势识别器添加到补充视图

在不使用 IBOutlet 的 xib 中获取手势识别器的参考