在 TableViewCell 内单击时 UIButton 标签重置
Posted
技术标签:
【中文标题】在 TableViewCell 内单击时 UIButton 标签重置【英文标题】:UIButton Label Resets When Clicked Inside A TableViewCell 【发布时间】:2014-07-16 21:08:03 【问题描述】:我有一个自定义表格视图单元格,当我单击单元格内的“数量按钮”时,单元格本身的值将重置为故事板上原型单元格定义的值(即“1”)。所以想象一下我点击第一个单元格图像下的按钮,按钮的标签从“5”变为“1”。按下按钮时我注释掉了所有代码,所以假设那里没有任何变化。这是为什么呢?
我的自定义单元格 (.h)
@interface BLCartItemCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) IBOutlet UIButton *quantityBtn;
@property (weak, nonatomic) IBOutlet UIButton *removeBtn;
@property (weak, nonatomic) IBOutlet UILabel *price;
@end
我的自定义单元格 (.m)
@implementation BLCartItemCell
@end
在我的视图控制器中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
// Section 0: Cart cells
static NSString *cartCellIdentifier = @"cartCell";
BLCartItemCell *cell = [tableView dequeueReusableCellWithIdentifier:cartCellIdentifier];
if (cell == nil)
cell = [[BLCartItemCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cartCell"];
// [cell.removeBtn addTarget:self action:@selector(removeBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
// [cell.quantityBtn addTarget:self action:@selector(quantityBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
// Grab the cart item from cart and set the cell properties
BLCartItem *cartItem = [self.cart.items objectAtIndex:indexPath.row];
cell.title.text = cartItem.title;
cell.quantityBtn.titleLabel.text = [NSString stringWithFormat:@"%i", cartItem.quantity];
cell.price.text = [NSString stringWithFormat:@"$ %.2f", [cartItem totalPrice]];
NSData *image_data = [[NSData alloc] initWithContentsOfURL:cartItem.image];
cell.imgView.image = [UIImage imageWithData:image_data];
// Buttons will keep track of cell index
cell.quantityBtn.tag = indexPath.row;
cell.removeBtn.tag = indexPath.row;
return cell;
我删除了与按钮关联的 IBActions,问题仍然存在。
【问题讨论】:
你是否将int数的初始值设置为1?我认为在您进行更改后,它会被调用两次。您需要将临时 int 保存到 NSUserdefaults 或 JSON 文件并从那里加载,而不是每次都设置为默认值。 你能告诉我们这背后的代码吗?我的猜测是,您的模型每次都会以某种方式将值重置为“1”,而不是重置为原型值。 提供正在创建单元格并按下按钮的表格视图委托代码 你去。我在情节提要中将 UIButton 默认值更改为 0。单击时,它变为 0。 另外,当我取消注释我的“addToTarget”函数时,我控制台记录了按钮的标题,它是“1”!这意味着在发送 touchupinside 事件之前,按钮已经以某种方式发生了变化。 【参考方案1】:我认为当你这样设置 buttonTitle 时会出现问题
cell.quantityBtn.titleLabel.text = [NSString stringWithFormat:@"%i", cartItem.quantity];
试试:
[cell.quantityBtn setTitle: [NSString stringWithFormat:@"%i", cartItem.quantity] forState: UIControlStateNormal]];
阅读全文
Text change on UIButton doesn't stick
Apple Document
【讨论】:
这实际上是解决方案,使用函数 setTitle: 而不是用点语法设置它。谢谢你!!!好奇怪…… 很高兴,因为它有帮助:)以上是关于在 TableViewCell 内单击时 UIButton 标签重置的主要内容,如果未能解决你的问题,请参考以下文章
单击按钮时将默认 TableViewCell 更改为自定义子类
在 tableviewcell 内滚动时防止 tableview 滚动
为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?
单击tableview标题按钮时如何将tableviewcell内的collectionview中的数据显示到另一个视图控制器
单击自定义 TableViewCell Swift 4 中的按钮时如何呈现单独的视图控制器?
View Controller Nav 中的 iOS Refresh 按钮:单击时重新加载从解析的 JSON 创建的所有 tableViewCell