我的自定義cell上面有5個控件,分別是一個背景的UIImageView,一個專輯的UIImageView(上面加了一個播放的button),一個專輯名字的UIImageView(上面加了顯示標題的UILabel)。當我給button綁定點擊事件的時候,發現點擊的方法觸發不了,百度了一下,網上都說是系統的問題,說是iOS7之后cell 的View變了,
試着按照指示改了一下,發現還是沒能解決問題,最后發現是UIImageView的用戶交互的問題,因為UIImageView的用戶交互是默認關閉的,加在它上面的控件自然也響應不了事件。只要把UIImageView的userInteractionEnabled改為YES就能解決問題了。
附錄:
自定義的UITableViewCell.h
#import <UIKit/UIKit.h>
@protocol PlayButtonDelegate <NSObject>
-(void)playButtonAction:(UIButton*)sender;
@end
@class Album;
@interface FMTableViewCell : UITableViewCell
@property(strong,nonatomic)UIImageView* typeImage;
@property(strong,nonatomic)UIImageView* typeName;
@property(strong,nonatomic)UIImageView* backImage;
@property(strong,nonatomic)UIButton* playButton;
@property(strong,nonatomic)UILabel* nameLabel;
@property(strong,nonatomic)Album* album;
@property(nonatomic)id<PlayButtonDelegate>delegate;
@end
自定義的UITableViewCell.m
#import "FMTableViewCell.h"
#import "UIImageView+WebCache.h" // SDWebImage類庫
#import "Album.h" // model模型
@implementation FMTableViewCell
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.typeImage = [[UIImageView alloc] init];
self.typeImage.backgroundColor = [UIColor yellowColor];
self.typeName = [[UIImageView alloc] init];
self.typeName.backgroundColor = [UIColor greenColor];
self.nameLabel = [[UILabel alloc] init];
// self.nameLabel.backgroundColor = [UIColor orangeColor];
self.backImage = [[UIImageView alloc] init];
self.playButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.contentView addSubview:self.backImage];
[self.backImage addSubview:self.typeName];
[self.backImage addSubview:self.typeImage];
[self.typeName addSubview:self.nameLabel];
// UIImageView的用戶交互要打開,不然添加在它上面的控件不能響應事件,不過cell的點擊方法可以實現
self.backImage.userInteractionEnabled = YES;
self.typeImage.userInteractionEnabled = YES;
[self.typeImage addSubview:self.playButton];
[self.playButton addTarget:self action:@selector(playButtonAction:) forControlEvents:UIControlEventTouchDown];
}
return self;
}
-(void)playButtonAction:(UIButton*)sender
{
NSLog(@"我的自定義按鈕呢");
}
-(void)layoutSubviews
{
[super layoutSubviews];
self.backImage.frame = self.contentView.frame;
self.backImage.backgroundColor = [UIColor orangeColor];
self.backImage.image = [UIImage imageNamed:@"22.png"];
CGFloat width = self.backImage.frame.size.width;
CGFloat height = self.backImage.frame.size.height;
self.typeImage.frame = CGRectMake(height/12, height/5, 3*height/5, 3*height/5);
self.typeName.frame = CGRectMake(CGRectGetMaxX(self.typeImage.frame)+10, height/6, width-CGRectGetMaxX(self.typeImage.frame)-25, 4*height/6);
self.typeName.image = [UIImage imageNamed:@"ming"];
self.typeImage.layer.cornerRadius = self.typeImage.frame.size.width/2;
self.typeImage.clipsToBounds = YES;
self.typeImage.layer.borderWidth = 1;
self.typeName.layer.cornerRadius = 9;
self.typeName.clipsToBounds = YES;
self.typeName.layer.borderWidth = 1;
self.nameLabel.frame = self.typeName.bounds;
self.playButton.frame = CGRectMake(3*self.typeImage.bounds.size.height/8, 3*self.typeImage.bounds.size.height/8, self.typeImage.bounds.size.height/4, self.typeImage.bounds.size.height/4);
[self.playButton setImage:[[UIImage imageNamed:@"playButton2.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];
}
-(void)setAlbum:(Album *)album
{
_album = album;
self.nameLabel.text = self.album.title;
self.nameLabel.textAlignment = NSTextAlignmentCenter;
self.nameLabel.numberOfLines = 0;
}
- (void)awakeFromNib {
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
cell的UI:
