我已经在UITableViewCell内的目标c中以编程方式创建了一个普通的UISwitch,当我在模拟器中查看它时,我看到了:
为什么会发生这种情况?我该如何解决?
以下是我如何实施它的代码:
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;
}
答案 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;
}
我就是这样做的。