重绘UITableView

时间:2011-12-26 14:56:17

标签: iphone ios ipad uitableview uiview

我需要在我的代码中重写一个事件的UITableView。但我尝试的一切似乎都不起作用。我试过了[self.tableView reloadData],我和代表们一起玩过。我试图实现的目标是使用不同格式的单元格呈现完全不同的UITableView。所以我需要重绘表格。任何帮助将不胜感激。

继承我的代码:

       ...
    if/else...
    }
    //Now I want to reload the tableView
    [tableView reloadData];    //Isn't getting it done
    NSLog(@"index = %i", index);  //Always fires
    tableView.delegate = self;  // Didn't help
    [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];  // Also nothing
}

我要做的就是:

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

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
         if (segmentOptions == snacks) {
             cell = [[TableViewCell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
              NSLog(@"A");
         } else {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
            NSLog(@"B");
         }
     }
  ...
}

3 个答案:

答案 0 :(得分:5)

你可能意味着像

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"cell-not-snacks";

    if (segmentOptions == snacks) {
        cellIdentifier = @"cell-snacks";
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
         if (segmentOptions == snacks) {
             cell = [[TableViewCell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
         } else {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
         }
     }
}

答案 1 :(得分:0)

我认为值得查看prepareForReuse中的方法UITableViewCell Class。在从UITableView方法dequeueReusableCellWithIdentifier返回对象之前调用此方法:。

您可以在自定义UITableViewCell上覆盖此方法(不要忘记包括[super prepareForReuse]),以便重绘您需要重绘的任何内容。

答案 2 :(得分:-2)

问题是:if (cell == nil) {。我删除了它,每次都很完美。