无法更新自定义UITableViewCell中的子视图

时间:2016-02-17 05:24:10

标签: ios objective-c uitableview ios7 tableviewcell

我有一个自定义UITableViewCell,其中有两个UIViews。我想更改BackgroundColor半径和UIViews的其他一些属性。

但我无法这样做。

这是我的setUp。

第1步:

Create A Custom Cell with XIB.

第2步:在Cell Identifer XIB中输入CustomCell名称。

第3步:NIB

中的实例化viewDidLoad
 UINib *nib = [UINib nibWithNibName:@"CustomCell" bundle:nil];
 [[self mTableView] registerNib:nib forCellReuseIdentifier:@"CustomCell"];

步骤4:索引方法行的单元格:

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    // Create an instance of ItemCell
   CustomCell *cell =  [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];

   [cell updateCellView];

   return cell;
}

步骤5:检查两次出口连接都很好。

第6步:自定义单元格类:

    #import "TransportCell.h"

    @implementation TransportCell

    - (void)awakeFromNib {
         // Initialization code

      }

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
       [super setSelected:selected animated:animated];

        // Configure the view for the selected state
     }


    - (void)updateCellView
    {
     self.backgroundView.backgroundColor = [UIColor redColor];
    }

   @end

此代码对我的Cell View没有影响。

我调试代码。当我记录backgroundView时,我会在调用nil方法时获得updateCellView

enter image description here

这是我的CustomCell' Xib:

enter image description here

我必须更改内部UIView的属性。(蓝色)

6 个答案:

答案 0 :(得分:0)

不是在cellForRowAtIndexPath中调用方法,而是尝试这个:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    // Create an instance of ItemCell
   CustomCell *cell =  [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
   return cell;
}

然后在自定义方法中

- (void)updateCellView
    {
     self.backgroundView.backgroundColor = [UIColor redColor];

     // reload the table view
     [self.tableView reloadData];
    }

答案 1 :(得分:0)

你需要添加[tableview reloadData]  在方法更新单元格视图中

答案 2 :(得分:0)

理想情况下,呈现单元格所需的所有信息都应来自数据源或其他事件。例如,如果要更改边框颜色,则应表示某个实体(例如用户)执行了某个事件,或者数据源中的某些内容已更改,例如值已超过其阈值。

数据源或这些事件的更改应触发刷新整个表:

-(void) reloadData 

或某些细胞:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

只有这样细胞才会得到更新。

答案 3 :(得分:0)

在TransportCell中尝试这种方法,它的快速代码对于目标c来说是相同的

{{1}}

答案 4 :(得分:0)

您正在更改self.backgroundview.backgroundColor

nil中的单元格默认为UITableViewStylePlainUITableViewStyleGrouped为非零。

' backgroundView'将被添加为所有其他视图背后的子视图。

@property (nonatomic, strong, nullable) UIView *backgroundView;

答案 5 :(得分:0)

使用此:

self.contentView.backgroundColor = [UIColor redColor];

希望这有帮助!