UISwitch图形工件

时间:2013-11-25 20:29:34

标签: objective-c uiswitch

我已经在UITableViewCell内的目标c中以编程方式创建了一个普通的UISwitch,当我在模拟器中查看它时,我看到了:

Graphics Glitch

为什么会发生这种情况?我该如何解决?

以下是我如何实施它的代码:

UISwitch课程:

#import <Foundation/Foundation.h>

@interface SwitchCell : UITableViewCell
+ (SwitchCell*)SwitchCellMake;
@end


@implementation SwitchCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

+ (SwitchCell*)SwitchCellMake{
    SwitchCell * newSwitchCell = [[SwitchCell alloc]init];

    UISwitch * cellSwitch = [[UISwitch alloc] init];
    [newSwitchCell.contentView addSubview:cellSwitch];
    [cellSwitch setCenter:CGPointMake(600, 30)];

    return newSwitchCell;
}

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

@end

viewDidLoad中:

- (void)viewDidLoad{
    [super viewDidLoad];
    [arySwitchCells addObject:[SwitchCell SwitchCellMake]];
}

和cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    SwitchCell *cellSwitchCell = (SwitchCell *)[tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];
    cellSwitchCell = [arySwitchCells objectAtIndex:indexPath.row];
    return cellSwitchCell;
}

1 个答案:

答案 0 :(得分:1)

为什么每次尝试分配此单元格?你应该出局它。我试试这个代码,它适用于我:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    UISwitch * cellSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(200, 10, 50, 50)];
    [cell.contentView addSubview:cellSwitch];

    return cell;
}

请记住设置小区标识符。

// EDITED

我会删除SwitchCellMake方法,并在initWithStyle中添加UISwitch到contentView:reuseIdentifier方法(如果使用nib,则为initWithCoder):

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.cellSwitch = [[UISwitch alloc] init];
        [self.contentView addSubview:self.cellSwitch];
    }
    return self;
}

正如您所看到的,cellSwitch是一个属性,因此您可以在layoutSubview中设置框架(您可以在此处理方向更改):

-(void)layoutSubviews
{
    [self.cellSwitch setFrame:CGRectMake(200, 10, 50, 50)];
}

之后只需在storyboard或viewDidLoad中注册您的单元格(如果您不使用nib)并将您的init方法更改为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SwitchCell *cellSwitchCell = (SwitchCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];

    cellSwitchCell.textLabel.text = [NSString stringWithFormat:@"Row: %d", indexPath.row];

    return cellSwitchCell;
}

我就是这样做的。