带自定义单元格的UITableView有两个按钮和两个标签

时间:2013-06-24 06:05:15

标签: iphone ios uitableview uisearchbar

我是iphone app Development的新手。我两个星期以来一直在遭遇这个问题。

我在xib中的uiviewcontroller类中使用搜索栏创建了uitableview。我正在使用自定义单元格显示表格视图。在自定义单元格中,我创建了uistepper,三个标签和xib中的图像。在这里,我正在显示图像和标签,以显示字典中的个人资料图像和文本。 自定义单元格中+和 - 功能的步进器。现在我想在标签中显示步进器动作。当我点击+按钮时,单击时标签计数将为1 - 按钮计数将在同一单元格中为0。我想要显示按钮计数在同一个单元格中。

任何人都可以帮助我......

感谢所有......

viewcontroller.m

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   static NSString *CellIdentifier = @"ListOfProductsCell";

   ListOfProductsCell *cell = (ListOfProductsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (cell == nil) {

   NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ListOfProductsCell" owner:self options:nil];
   cell = [nib objectAtIndex:0];

     productItemDit=[productListArry objectAtIndex:indexPath.row];
            NSString *offerStr= [NSString stringWithFormat:@"%.2f",[[productItemDit objectForKey:@"offer"] floatValue]];
            NSString *fullCostStr=[[currencyCodeStr stringByAppendingString:@" "] stringByAppendingString:offerStr];
            NSLog(@"%@",fullCostStr);
            cell.itemCostLbl.text=fullCostStr;

            cell.itemStepper.tag=166;
            cell.itemAddedLbl.tag=122;

            cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];

  }


         if (tableView == self.searchDisplayProduct.searchResultsTableView) {
                searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
                NSLog(@"searchdit:%@",searchProductItemDit);
                cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
                self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
            } else {
                productItemDit=[productListArry objectAtIndex:indexPath.row];
                NSLog(@"dit:%@",productItemDit);
                cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];

            }
        cell.itemAddedLbl =(UILabel*)[cell viewWithTag:122];
        cell.itemAddedLbl.text = [[NSString alloc] initWithFormat:@"%d",itemCount];
        return cell;

}

ListOfProducts.m

//this method in custom class to get stepper action     
-(IBAction)itemValueChanged:(UIStepper *)sender
{
   ListOfProductsCell *clickedCell = (ListOfProductsCell *)[[sender superview] superview];
    double stepperValue = itemStepper.value;
     itemAddedLbl=(UILabel*)[clickedCell viewWithTag:122];
    itemAddedLbl.text=[[NSString alloc] initWithFormat:@"%.f", stepperValue];

 }

当我在上面使用它完美的工作时。但是当滚动表格视图时,我从步进器添加的值消失了

2 个答案:

答案 0 :(得分:1)

使用此按钮添加自定义按钮或标签并为其指定标签i.e. indexpath.row

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }


      // Add  Custom Button 
        cellLikeBtn=[[UIButton alloc]init];
        cellLikeBtn.frame=CGRectMake(262, 5, 48,62);

        cellLikeBtn.backgroundColor=[UIColor whitecolor];
        cellLikeBtn.tag=indexPath.row;
        [cellLikeBtn addTarget:self action:@selector(Checktag:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:cellLikeBtn];
        [cellLikeBtn release];

    }

现在您将获得自定义标签或按钮的标记。您可以对其进行更改。

 -(IBAction)Checktag:(UIButton *)sender
    {
        NSLog(@"%d",sender.tag);
        UIButton* button = (UIButton *) sender;
        UIImage *image = [UIImage imageNamed:@"abc.png"];
        [button setImage:image forState:UIControlStateNormal];

    }

在您的情况下用标签替换按钮。

我希望这能解决问题。

您可以按如下方式使用:

在cellforRowAtIndexPath上分配您的方法,就像那样

[cell.contentView addTarget:self action:@selector(Checktag:event:)forControlEvents:UIControlEventTouchUpInside];

- (void)Checktag:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];

   NsLog("value of indePath.section %d ,indexPath.row %d",indexPath.section,indexPath.row);

}

答案 1 :(得分:0)

使用此代码作为参考。根据您的要求对此代码进行更改。我编辑了你的代码,并试图不做大的改动。但严重的是你的代码不清楚和混乱。您可以清理代码并使其更好。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"ListOfProductsCell";

        ListOfProductsCell *cell = (ListOfProductsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil) {
            cell = [[[NSBundle mainBundle] loadNibNamed:@"ListOfProductsCell" owner:self options:nil]objectAtIndex:0];
        }

            productItemDit=[productListArry objectAtIndex:indexPath.row];
            NSString *offerStr= [NSString stringWithFormat:@"%.2f",[[productItemDit objectForKey:@"offer"] floatValue]];
            NSString *fullCostStr=[[currencyCodeStr stringByAppendingString:@" "] stringByAppendingString:offerStr];
            NSLog(@"%@",fullCostStr);
            cell.itemCostLbl.text=fullCostStr;

            cell.itemStepper.tag=indexPath.row+indexPath.section+1;
            cell.itemAddedLbl.tag=indexPath.row+indexPath.section+101;

            cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];

         if (tableView == self.searchDisplayProduct.searchResultsTableView) {
                searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
                NSLog(@"searchdit:%@",searchProductItemDit);
                cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
                self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
            } else {
                productItemDit=[productListArry objectAtIndex:indexPath.row];
                NSLog(@"dit:%@",productItemDit);
                cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];

            }
        cell.itemAddedLbl =(UILabel*)[cell viewWithTag:indexPath.row+indexPath.section+1];
        cell.itemAddedLbl.text = [[NSString alloc] initWithFormat:@"%d",itemCount];
        return cell;
    }

-(IBAction)itemValueChanged:(UIStepper *)sender
{
   ListOfProductsCell *clickedCell = (ListOfProductsCell *)[[sender superview]  superview];
    itemAddedLbl=(UILabel*)[clickedCell viewWithTag:sender.tag+100];
     double stepperValue = sender.value;
    itemAddedLbl.text=[[NSString alloc] initWithFormat:@"%.f", stepperValue];

 }