我正在尝试在tableviewCells中创建一个星形按钮,这样用户就可以保存喜欢的项目。
到目前为止我已经尝试过了。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeRoundedRect];
CameraBreak.frame=CGRectMake(260, 10, 60, 40);
CameraBreak.tag=indexPath.row;
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:CameraBreak];
cell.textLabel.text = [titles objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15];
return cell;
}
问题是viewDidLoad上的按钮如下所示:
但是一旦我把桌子弄得乱七八糟,按钮就会改变:
有人知道这种行为的原因吗?我怎么解决这个问题?
更新
未选择:
选择的:
答案 0 :(得分:1)
为什么不使用accessoryView
类的UITableViewCell
属性。
// create your button here...
[cell setAccessoryView:cameraBreak]; // or cell.accessoryView = cameraBreak;
另外,将CameraBreak
重命名为cameraBreak
。您应该使用 camelCaseNotation 。
让我知道这是否有效。
修改强>
这种方式对以下想法也有用:if(附件 选中){show yellowstar.png} else(show graystar.png)
您可以更改imageView
的{{1}}属性。
UITableViewCell
实现这一目标非常简单。关注how to set a tableview delegate。特别是你应该看看cell.imageView = // set the correct image
协议方法。
答案 1 :(得分:0)
更改UIButton类型Custom代替roundRect,每次重新加载表时都会添加按钮。因此,将所有这些代码添加到要分配单元格的大括号中,以便可以重用它们(不重复分配)。
替换此代码
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeRoundedRect];
CameraBreak.frame=CGRectMake(260, 10, 60, 40);
CameraBreak.tag=indexPath.row;
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:CameraBreak];
作为
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UIButton *CameraBreak=[UIButton buttonWithType:UIButtonTypeCustom];
CameraBreak.frame=CGRectMake(260, 10, 60, 40);
CameraBreak.tag=indexPath.row;
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[CameraBreak addTarget:self action:@selector(starClicked::) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:CameraBreak];
}
它会正确显示。
希望它对你有所帮助。
答案 2 :(得分:0)
你看到的是许多按钮被添加到每个单元格的结果,一个在下一个单元格中。所有这些按钮创建代码都应该在cell == nil条件内发生。这样它只发生在新细胞上,而不是重复使用的细胞:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UIButton *CameraBreak=[UIButton buttonWithType: UIButtonTypeCustom];
CameraBreak.frame=CGRectMake(260, 10, 60, 40);
CameraBreak.tag=indexPath.row;
[CameraBreak setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
[CameraBreak addTarget:self action:@selector(starClicked:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:CameraBreak];
}
// configure the parts of the cell here that vary based on indexPath