我在向UITableViewCell
添加按钮时遇到问题,该单元格有两个UILabel
和两个UIImageView
,有时UIImageView
会包含图片,有时候一个按钮:
在我的UITableViewCell
子类中,我有:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if ( self ) {
// Initialization code
firstLock = [[UILabel alloc]init];
[firstLock setBackgroundColor:[UIColor clearColor]];
firstLock.textAlignment = UITextAlignmentLeft;
firstLock.font = [UIFont fontWithName:@"Arial-BoldMT" size:17];
secondLock= [[UILabel alloc]init];
[secondLock setBackgroundColor:[UIColor clearColor]];
secondLock.textAlignment = UITextAlignmentRight;
secondLock.font = [UIFont fontWithName:@"Arial-BoldMT" size:17];
firstLockImage = [[UIImageView alloc]init];
secondLockImage = [[UIImageView alloc] init];
[self.contentView addSubview:firstLock];
[self.contentView addSubview:secondLock];
[self.contentView addSubview:firstLockImage];
[self.contentView addSubview:secondLockImage];
}
return self;
}
当其中一个UIImageView
只是图片时没问题,但是当我将UIButton
(已成像)添加为子视图时,它会崩溃。
在UITableViewDataSource
实施中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *btnImage = [UIImage imageNamed:@"bike_ok.png"];
UIButton *button =[UIButton alloc];
[button setImage:btnImage forState:UIControlStateNormal];
[cell.secondLockImage addSubview:button];
添加按钮作为图像视图的子视图会崩溃:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Requesting the window of a view (<UIButton: 0x7bac7d0; frame = (0 0; 0 0); transform = [0, 0, 0, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = (null)>) with a nil layer. This view probably hasn't received initWithFrame: or initWithCoder:.'
*** First throw call stack:
我错过了什么?
谢谢!
添加!这条线很重要
[firstLockImage setUserInteractionEnabled:YES];
[secondLockImage setUserInteractionEnabled:YES];
因为UIImageView默认为NO,没有它就没有按钮!
答案 0 :(得分:5)
如果您阅读了崩溃错误,很容易看出您的问题所在。您尚未初始化按钮。
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0,0,0,0)];
或者您可以使用initWithCoder。
希望这有帮助
萨姆
答案 1 :(得分:1)
阅读例外文本 - 它说:
此视图可能尚未收到initWithFrame:或initWithCoder:
您的问题只有几行,您正在向UIButton
个实例发送消息,而您只有alloc
'并且未向其发送任何init...
消息。那是你的错误。
此外,您不应直接调用 alloc
上的init
/ UIButton
对,因为它是一个类群集,您通常应该使用+[UIButton buttonWithType:]
来获取一个按钮实例。
编辑实际上我并不是百分之百确定。但是如果你做initWithFrame:
,你并不确切知道会得到什么,所以我仍然会使用buttonWithType:
来获得自定义按钮,这就是你想要的。 结束编辑
因此,将该行更改为:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
希望这有帮助!
答案 2 :(得分:1)
将UIButton *button =[UIButton alloc];
(分配无初始?)更改为
UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
//set frame
[button setFrame:(CGRect){x,y,w,h}];
+buttonWithType
处理您的UIButton对象的alloc / init