我有一个集合视图。在集合视图中,有8个单元格。每个单元格都有一个按钮。单击一个按钮我必须在其底部添加一个视图,并将其文本cor从白色更改为黑色。实现这一点,我已经完成了以下代码
-(void)doSomething:(UIButton *) sender {
if(sender.isSelected){
[sender setTitleColor:[UIColor colorWithRed:36/255.0 green:71/255.0 blue:113/255.0 alpha:1.0] forState:UIControlStateNormal];
recipeHeading = (RecipeHeadingCell*)[[sender superview] superview];
NSIndexPath *path = [_headingCollectionView indexPathForCell:recipeHeading];
UIView *bottomBorder = [[UIView alloc] initWithFrame:CGRectMake(0, sender.frame.size.height + 2.0f, sender.frame.size.width, 30)];
bottomBorder.backgroundColor = [UIColor whiteColor];
[sender addSubview:bottomBorder];
[_outerCollectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
sender.selected=false;
}
else{
NSLog(@"not selected");
sender.selected=true;
}
}
但还有一个场景要解决,即当您在单元格1中选择一个按钮时,其余的(甚至是之前选择的那个)应该自动进入不可选状态,即它们应该具有白色标题颜色并且应该有在他们的底部没有看法。 我的代码适用于选择的东西,但它不会改变其他未选择的按钮的状态。请在这个方向给我一些指导。任何帮助或建议将不胜感激。谢谢提前!
答案 0 :(得分:0)
它需要为每个具有选择状态的true或false值的单元格添加模型(布尔数组并在 cellForRowAtIndexpath 中访问它),并且当单击一个单元格时刷新整个表格重绘
@interface ViewController ()
{
NSMutableArray*allValues;
}
在viewDidLoad
中 allValues = [NSMutableArray new];
for(int i = 0 ;i<YourTableViewArrayCount;i++)
{
[allValues addObject:[NSNumber numberWithBool:NO]];
}
和tableview dataSource
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
bool d = [allValues[indexPath.row] boolValue];
if(d)
{
// cell selected
}
else
{
// cell not selected
}
/// implement remaining here
}
注意:在UITableViewCell自定义类中单击一个单元格并使用 NotificationCenter <重新加载 tableView 时,将此数组设为全局并更改其值/ strong>或任何观察员
答案 1 :(得分:0)
创建集合视图时,将按钮标记提供为单元格的indexPath.item。 单击按钮时,将按钮标记保存在全局值中(让我们将其称为 selectedRow ,并将值初始设置为-1)并重新加载集合视图。 如果 selectedRow 和indexPath.item相同,则在索引处的项目的单元格中显示边框并查看其他内容。
希望这有帮助