更改UITableView单元格上的标签?

时间:2012-11-24 07:07:07

标签: objective-c ios uitableview

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

当我点击复选框时,我会在其他一些内容中更改标签'在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行上的checkBox然后'在0天内到期'第3行,第4行的标签等应该更改。任何建议或示例代码将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:1)

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

从我的代码中可以看出,您的数据似乎“存储”在您的视图对象中。总的来说这是一个非常糟糕的想法,这是一个很糟糕的想法与表视图,因为单元格正在被重用,当你滚动大表时,你的数据就会消失。

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

实现这种模式后,检查一个单元格中的某些内容将更新模型对象。然后,您需要做的就是进行简单的[tableView reloadData];调用,以便立即更新所有单元格。