0

我在UITableView像这张图片的单元格上添加了 3 个标签和一个按钮截屏

当我单击复选框时,我会在其他一些内容中更改标签“0 天后到期”。这段代码没问题

[statusText setTextColor:[UIColor colorWithRed:0.0/255.0 green:51.0/255.0 blue:102.0/255.0 alpha:1.0]];
[statusText  setFont:[UIFont boldSystemFontOfSize:16.0]];
statusText.tag = 100;
[statusText setBackgroundColor:[UIColor clearColor]];
[checkBoxBtn setBackgroundImage:[UIImage imageNamed:@"check_normal.png"] forState:UIControlStateNormal];
[checkBoxBtn addTarget:self action:@selector(showAlert:) forControlEvents:UIControlEventTouchUpInside];
checkBoxBtn.tag = indexPath.row;
[cell.contentView addSubview:checkBoxBtn];

这是我的 checkBoxAction 和 showAlert 方法

-(void) checkBoxAction: (UIButton *)sender 
{

    NSInteger i =sender.tag + 1;
    float perc = (i*100/18.0);
    //NSLog(@"%.2f",perc);
    NSString* percentageStr = [[NSString alloc] initWithFormat:@"%3.2f%%(%d out of 18)",perc, i];
    barTitle.text = percentageStr;
    barFGImage.hidden = NO;
    if (perc == 100.00) {
             [barFGImage setFrame:CGRectMake(barFGImage.frame.origin.x, barFGImage.frame.origin.y, 276.0, barFGImage.frame.size.height)];
        }
        else
            [barFGImage setFrame:CGRectMake(barFGImage.frame.origin.x, barFGImage.frame.origin.y, 280*perc/100, barFGImage.frame.size.height)];

        [sender setBackgroundImage:[UIImage imageNamed:@"check_select.png"] forState:UIControlStateNormal];

    sender.userInteractionEnabled = NO;

    NSString *currentDate = [formatter stringFromDate:[NSDate date]];
    NSString* statusStr = [[NSString alloc] initWithFormat:@"Completed on %@",currentDate];
    UILabel *tempLabel = (UILabel *)[[button superview] viewWithTag:100];
    tempLabel.textColor = [UIColor colorWithRed:243.0/255.0 green:134.0/255.0 blue:48.0/255.0 alpha:1.0];
    tempLabel.text = statusStr;

}

- (void) showAlert:(id)sender
{
    button = (UIButton *)sender;
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"Do you really want to complete this training?" delegate:self cancelButtonTitle:@"Yes, I've completed it" otherButtonTitles: @"No", nil];
    [alert show];
}

现在我希望,如果我在第 3 行(例如)按复选框,那么第 3、第 4 行等的“0 天到期”标签应更改。任何建议或示例代码将不胜感激。谢谢。

4

1 回答 1

1

恐怕我的建议不会是一个简单的建议或代码示例,而是我会邀请您花一些时间阅读 MVC(模型视图控制器)。

从我从您的代码中可以看出,您的数据似乎“存储”在您的视图对象中。一般来说,这是一个非常糟糕的主意,这对于表格视图来说是一个糟糕的主意,因为单元格正在被重用,并且当您滚动浏览大表格时,您的数据就会消失。

您需要做的是定义模型类来保存您的数据,然后控制器对象将访问这些模型对象并在它们控制的各种视图中显示它们的数据。

一旦你实现了这种模式,检查一个单元格中的内容将更新你的模型对象。然后你需要做的就是打一个简单的[tableView reloadData];电话来一次更新你所有的细胞。

于 2012-11-24T07:16:45.567 回答