发布为分组样式表创建自定义UITableViewCell的问题

时间:2011-12-22 20:35:53

标签: iphone objective-c uitableview cgrectmake

我正在尝试创建一个自定义单元格,以便在分组样式UITableView中使用。但是,当我运行我的代码时,我会在代码中标记的点处遇到错误。我不知道有什么问题。请有人帮帮我吗?

.h文件:

@interface CustomRecommendedStepCell : UITableViewCell
{
    UILabel *stepNumber;
    UITextView *stepInstruction;
}


@property(nonatomic, retain)IBOutlet UILabel *stepNumber;
@property(nonatomic, retain)IBOutlet UITextView *stepInstruction;


@end

.m文件:

#import "CustomRecommendedStepCell.h"

@implementation CustomRecommendedStepCell
@synthesize stepNumber, stepInstruction;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self)
    {
        UIImageView *backgroundView = [[UIImageView alloc] init];
        [backgroundView setImage:[UIImage imageNamed:@"Slate_bg.png"]];
        self.backgroundView = backgroundView;
        self.backgroundColor = [UIColor clearColor];

        stepNumber = [[UILabel alloc] init];
        stepNumber.textAlignment = UITextAlignmentLeft;
        stepNumber.font = [UIFont fontWithName:kCustomFont1 size:40];
        stepNumber.textColor =[UIColor whiteColor];
        stepNumber.backgroundColor = [UIColor clearColor];

        stepInstruction = [[UITextView alloc] init];
        stepInstruction.editable = NO;
        stepInstruction.textAlignment = UITextAlignmentLeft;
        stepInstruction.font = [UIFont fontWithName:kCustomFont1 size:23];
        stepInstruction.textColor =[UIColor whiteColor];
        stepInstruction.backgroundColor = [UIColor clearColor];

        [self.contentView addSubview:stepNumber];
        [self.contentView addSubview:stepInstruction];
    }

    return self;
}


- (void)layoutSubviews
{
    [super layoutSubviews];

    stepNumber.frame = CGRectMake(20, 20, 50, 60);        // PROBLEM OCCURS HERE!
    stepInstruction.frame = CGRectMake(70, 20, 200, 60);
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

以下是我收到的日志消息的副本:

2011-12-22 20:34:09.801 Some App[30945:10703] -[__NSCFString setFrame:]: unrecognized selector sent to instance 0x756b340
2011-12-22 20:34:09.802 Some App[30945:10703] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString setFrame:]: unrecognized selector sent to instance 0x756b340'
*** First throw call stack:
(0x11f052 0x1845d0a 0x120ced 0x85f00 0x85ce2 0xd7c1 0x778322 0x120e72 0x359792d 0x35a1827 0x35a1922 0x771f47 0x924edd 0x7d2fe1 0x7d3589 0x7bedfd 0x7cd851 0x778301 0x120e72 0x359792d 0x35a1827 0x3527fa7 0x3529ea6 0x3529580 0xf39ce 0x8a670 0x564f6 0x55db4 0x55ccb 0x3ab4879 0x3ab493e 0x739a9b 0x2128 0x2085 0x1)
terminate called throwing an exception

3 个答案:

答案 0 :(得分:2)

在您的tableView:cellForRowAtIndexPath:方法中,您似乎可以执行类似

的操作
cell.stepNumber = @"text";

而不是

cell.stepNumber.text = @"text";

答案 1 :(得分:1)

我认为问题不在于此代码..请检查您的tableView:cellForRowAtIndexPath:方法,如Eugene建议的那样。我想您可能会返回NSString而不是UITableViewCell

答案 2 :(得分:0)

在调用layoutSubviews时,您的stepNumber标签已经被释放(或从未分配过)。

我的猜测是你需要查看实例化自定义单元格的方式。你肯定你的initWithStyle:方法被调用吗?

您可以发布视图控制器的cellForRowAtIndexPath:方法吗?