无法在tableView中刷新单元格textLabel

时间:2014-08-29 19:46:31

标签: ios objective-c uitableview

在我的iOS应用程序中,我想在加载viewController时刷新tableView的全部内容。 tableView的每个单元格都有一个textLabel,它是一个步骤对象的名称。

我确保当我返回viewController时,加载了正确的stepNames(我通过记录步骤的名称来了解这一点)。但是,步骤的名称不会在tableView中更新。

如何确保tableView单元格的标签正确加载?

我如何尝试触发TableView的刷新:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:YES];
    if(reloadSteps == YES){
        NSLog(@"reloading steps");
        NSData * stepsData = [NSData dataWithContentsOfURL:stepsURL];
        [self fetchProjectSteps:stepsData];
        [self.projectInfo reloadData];
        int numRows = [stepNames count];
        NSLog(@"numRows %i", numRows);
        for(int i =0; i<numRows; i++){
            [self tableView:self.projectInfo cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        }
    }
}

如何呈现tableView的每个单元格:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"StepCell"];
    }
    if (indexPath.row ==0) {
        cell.textLabel.font = [UIFont systemFontOfSize:16];
        cell.textLabel.textColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
        cell.textLabel.text = @"Project Description";
        cell.textAlignment = NSTextAlignmentCenter;
    } else {
        cell.userInteractionEnabled = YES;
        cell.textLabel.font = [UIFont systemFontOfSize:16.0];
        cell.textLabel.text = [stepNames objectAtIndex:indexPath.row];
        NSLog(@"textLabel: %@", cell.textLabel.text); // THIS IS CORRECT, BUT DOES NOT APPEAR TO BE UPDATED IN THE TABLEVIEW

        if(![[stepImages objectAtIndex:indexPath.row] isEqual: @""]) {
            cell.accessoryView = [stepImages objectAtIndex:indexPath.row];
        }
    }
    return cell;
}

这是我的头文件:

@interface EditProjectViewController : UIViewController <UIActionSheetDelegate, UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate>{
  @property (strong,nonatomic) IBOutlet UITableView *projectInfo;
}

然后在我的实现文件中:

-(void) viewDidLoad{
    self.projectInfo = [[UITableView alloc]init];
    self.projectInfo.delegate = self;
}

1 个答案:

答案 0 :(得分:1)

删除所有这些:

    int numRows = [stepNames count];
    NSLog(@"numRows %i", numRows);
    for(int i =0; i<numRows; i++){
        [self tableView:self.projectInfo cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
    }

您的reloadData来电会为您的表格视图中的每个单元格调用cellForRowAtIndexPath:。只需确保您stepNames.count返回numberOfRowsInSection:

修改

我查看了您的更新代码。一些事情(包括你最有可能的问题):

  1. 您的projectInfo商家应该是weak,而不是strong(因为它是IBOutlet
  2. 即使您已在界面文件中链接了表格视图,也可以在viewDidLoad中初始化它,创建新实例
  3. 更改以下内容:

    -(void) viewDidLoad{
        self.projectInfo = [[UITableView alloc]init];
        self.projectInfo.delegate = self;
    }
    

    对此:

    -(void) viewDidLoad{
        self.projectInfo.dataSource = self;
        self.projectInfo.delegate = self;
    }