iphone - 如何解决表格 View 中的滚动问题

标签 iphone ios uitableview uibutton

我在 UITableViewCell 中有两个按钮和一个标签,名为 +、- 和 countLabel。

初始 countLabel 应为 0。当我单击 + 按钮时,单击的单元格的 countLabel 将增加 1;当我单击 - 按钮时,单击的单元格的 countLabel 将减少 -1。工作正常。

但我的问题是当我滚动表格 View 时..countLabel 文本显示在表格 View 的所有单元格中。

我试过这个吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *CellIdentifier = @"productListCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSString *title;
UILabel *productNameLbl;
UILabel *countLbl;
NSMutableDictionary *productListCellDit;
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    productNameLbl =[[UILabel alloc]init];
    [productNameLbl setFrame:CGRectMake(53, 2, 120, 59)];
    [productNameLbl setTextColor:[UIColor blackColor]];
    [productNameLbl setBackgroundColor:[UIColor clearColor]];
    [productNameLbl setTextAlignment:NSTextAlignmentLeft];
    [productNameLbl setFont:[UIFont boldSystemFontOfSize:15.0]];
    productNameLbl.lineBreakMode=NSLineBreakByWordWrapping;
    productNameLbl.numberOfLines=3;
    productNameLbl.tag=2;
    [cell.contentView addSubview:productNameLbl];

    countLbl =[[UILabel alloc]init];
    [countLbl setFrame:CGRectMake(56, 60, 117, 12)];
    [countLbl setTextColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0]];
    [countLbl setBackgroundColor:[UIColor clearColor]];
    [countLbl setTextAlignment:NSTextAlignmentLeft];
    [countLbl setFont:[UIFont boldSystemFontOfSize:15.0]];
    countLbl.tag=3;
    [cell.contentView addSubview:countLbl];


    decreaseBtn =[UIButton buttonWithType:UIButtonTypeCustom];
    [decreaseBtn setTitle:@"-" forState:UIControlStateNormal];
    [decreaseBtn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal];
    [decreaseBtn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateHighlighted];
    [[decreaseBtn titleLabel] setFont:[UIFont boldSystemFontOfSize:23]];
    [decreaseBtn setFrame:CGRectMake(259, 2, 30, 71)];
    decreaseBtn.tintColor=[UIColor lightGrayColor];
    decreaseBtn.tag=indexPath.row;
    [decreaseBtn setBackgroundImage:[UIImage imageNamed:@"-+BtnImg.png"] forState:UIControlStateNormal];
    [decreaseBtn addTarget:self action:@selector(decreaseItemCount:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:decreaseBtn];

    increaseBtn =[UIButton buttonWithType:UIButtonTypeCustom];
    [increaseBtn setTitle:@"+" forState:UIControlStateNormal];
    [increaseBtn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal];
    [increaseBtn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateHighlighted];
    [[increaseBtn titleLabel] setFont:[UIFont boldSystemFontOfSize:23]];
    [increaseBtn setFrame:CGRectMake(289, 2, 30, 71)];
    increaseBtn.tintColor=[UIColor lightGrayColor];
    increaseBtn.tag=indexPath.row;
    [increaseBtn setBackgroundImage:[UIImage imageNamed:@"-+BtnImg.png"] forState:UIControlStateNormal];
    [increaseBtn addTarget:self action:@selector(increaseItemCount:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:increaseBtn];
} else {
    productNameLbl =(UILabel *)[cell.contentView viewWithTag:2];
    countLbl =(UILabel *)[cell.contentView viewWithTag:3];
    decreaseBtn =(UIButton *)[cell.contentView viewWithTag:indexPath.row];
    increaseBtn =(UIButton *)[cell.contentView viewWithTag:indexPath.row];
}
productListCellDit=[productListArry objectAtIndex:indexPath.row];
title= [productListCellDit objectForKey:@"name"];

productNameLbl.text=title;
countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];

return cell;

}

 //to increment count
-(void)increaseItemCount:(UIButton *)sender

{
    UITableViewCell *cell = (UITableViewCell *)sender.superview.superview;
NSIndexPath *path = [listOfProductsTable indexPathForCell:cell];
NSLog(@"row: %d",path.row);
UILabel *countLbl =(UILabel *)[cell.contentView viewWithTag:3];
showItemCount=[countLbl.text intValue] + 1;
NSLog(@"%d",showItemCount);
countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];

     }

  //to decrement count
  -(void)decreaseItemCount:(UIButton *)sender
  {
   if (!showItemCount==0) {
    UITableViewCell *cell = (UITableViewCell *)sender.superview.superview;
    NSIndexPath *indexPath = [listOfProductsTable indexPathForCell:cell];
    NSLog(@"row: %d",indexPath.row);
    UILabel *countLbl =(UILabel *)[cell.contentView viewWithTag:3];
    showItemCount=[countLbl.text intValue] - 1;
    NSLog(@"%d",showItemCount);
    countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];
   }
   }

在ViewDidLoad中

showItemCount=0

最佳答案

您需要在cellForRowAtIndexPath方法中设置标签的tag = 3,然后执行。

-(void) increaseItemCount:(UIButton *) sender
{ 
    // ----- edited ----
    NSIndexPath *path = [NSIndexPath indexPathForRow:[sender.tag intValue] inSection:section];

    UILabel *content = (UILabel *)[[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:path] contentView] viewWithTag:3];
    content.text = [content.text intValue]+1;
}

-(void) decreaseItemCount:(UIButton *) sender
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:[sender.tag intValue] inSection:section];

    UILabel *content = (UILabel *)[[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:path] contentView] viewWithTag:3];
    content.text =  [content.text intValue]-1;
}

关于iphone - 如何解决表格 View 中的滚动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18097387/

相关文章:

iphone - Xcode 内部 dealloc 保留计数 = 1

java - 在移动设备上禁用缩放

c++ - 找不到图书馆……?

ios - GRPCcall2 的用法示例

ios - Xcode:Table View Cell 不会自动调整其高度

ios - 删除部分时 UITableView 的平滑动画

ios - 用于在 Windows 中开发 iOS 应用程序的 Smartface 或 Xamarin

ios - 我可以在 SwiftUI 中布局后获得 `View` 的位置吗?

ios - 无法正确加载 iPhone 4"图像

iphone - 我如何更改分隔线,以便它们在 UITableView 中的填充单元格后消失