在 iOS 中使用自定义单元格时无法查看 UITableViewCell

Posted

技术标签:

【中文标题】在 iOS 中使用自定义单元格时无法查看 UITableViewCell【英文标题】:Unable to view UITableViewCell when using custom cell's in iOS 【发布时间】:2014-01-11 05:40:47 【问题描述】:

我在我的应用程序中使用自定义 UITableViewCell 来为每一行显示一个简单的标签。但是,由于某种原因,我无法显示包含要在每个单元格中显示的文本的数组的内容。我使用 Interface Builder 在 .xib 文件中制作了自定义 UITableViewCell,而使用此自定义 UITableViewCell 的 viewController 位于我的故事板文件中。

这是我的屏幕在 IB 中的样子:

这是我的自定义 UITableViewCell 类中的相关方法:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code
    
    return self;

因为我已经在 IB 中完成了所有工作,所以我没有在 initWithStyle 方法中包含任何代码。

我在 ViewController 中使用自定义单元格的相关代码如下:

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.menuArray = @[@"Apples", @"Pears", @"Bananas", @"Oranges", @"Peaches"];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    static NSString *cellIdentifier = @"Cell";
    MenuTableCell *cell = (MenuTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) 

        cell = (MenuTableCell *)[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    

    cell.menuLabel.text = [self.menuArray objectAtIndex:indexPath.row];

    return cell;



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    return [self.menuArray count];

谁能看出我做错了什么?

【问题讨论】:

为什么要创建 3 个单元格,1 个就足够了 并声明section中的行数 我没有创建三个单独的单元格,这是同一个单元格,只是右侧工具栏的不同视图。 【参考方案1】:

如果你在 xib 文件中创建一个单元格,你应该在 viewDidLoad 中调用 registerNib:forIdentifier:。如果这样做,则无需检查 cellForRowAtIndexPath 中的零单元格。

【讨论】:

非常感谢您的回答。我快到了。出于某种原因,我的表格单元格现在显示“标签”,而不是数组中的正确值。你明白为什么吗? 另外,如果我按照您的建议进行操作,我将如何从 viewDidLoad 调用 registerNib:forIdentifier,那么我的 cellForRowAtIndexPath 中的代码会是什么样子?我可以简单地完全删除 if (cell == nil) 块吗? @syedfa,是的,您可以删除 cell==nil 块。它是这样调用的——[self.tableView registerNib:[UINib nibWithNibName:@"SampleCell1" bundle:nil] forCellReuseIdentifier:@"SampleCell1"];【参考方案2】:

我认为这对您有用....并检查您的标签插座连接以显示正确的答案

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:  (NSInteger)section

      return [menuArray count];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

      static NSString *simpleTableIdentifier = @"CustomCell";

       CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
     if (cell == nil)
   
       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
       cell = [nib objectAtIndex:0];
   
     cell.menuLabel.text = [self.menuArray objectAtIndex:indexPath.row];  

【讨论】:

【参考方案3】:

在您的 viewController 中实现以下所需的方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [self.menuArray count];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 


    return [self.menuArray count];

我已经编辑了 cellForRowAtIndexPath 看看它

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 


    static NSString *cellIdentifier = @"Cell";
    MenuTableCell *cell = (MenuTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    //Edited Code for creating the cell*****************************************            
    if (cell == nil) 
    

          NSArray *objectsArray = [[NSBundle mainBundle] loadNibNamed:@"MenuTableCell" owner:self options:nil];

          for (id objectCell in objectsArray)
          
                cell = (MenuTableCell*)objectCell;
          
    

    cell.menuLabel.text = [self.menuArray objectAtIndex:indexPath.row];

    return cell;

希望这对你有用

【讨论】:

非常感谢您的解决方案,我的代码几乎可以工作了。出于某种原因,每个表格单元格都显示文本“标签”而不是 self.menuArray 中的适当值。你明白为什么吗? @syedfa 嘿,您可以写下NSLog(@"currentLabel:%@",[self.menuArray objectAtIndex:indexPath.row]); 并查看它实际返回的内容。如果它返回你想要的,那么可能是你没有将 menuLabel 链接到 xib 中的标签【参考方案4】:

yourViewController 中添加numberOfRowsInSection 方法,如下所示

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [self.menuArray count];

【讨论】:

以上是关于在 iOS 中使用自定义单元格时无法查看 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格

在ios的uitableview中自定义单元格编辑样式

使用自定义单元格时是不是调用了 cellForRowAtIndexPath?

为啥在制作自定义表格视图单元格时将可重用单元格出列两次

为 iOS 选择 TableView 单元格时视图已更改

编辑单元格时自定义 UITableViewCell 反向缩进