在 UIScrollView/UIView 内设置 UITableViewCell 样式

Posted

技术标签:

【中文标题】在 UIScrollView/UIView 内设置 UITableViewCell 样式【英文标题】:Style UITableViewCell inside UIScrollView/UIView 【发布时间】:2013-07-17 20:26:27 【问题描述】:

概述

我使用情节提要在 UIScrollView 中添加了 UITableView。

我的简单目标是在这个表格视图中设置 UITableViewCell 的样式。

代码

目前,我已将 UITableView 属性添加到视图控制器并在情节提要中添加了插座。

@interface NWDetailViewController : UIViewController<UITableViewDelegate,
    UITableViewDataSource> 
  IBOutlet UIScrollView *scrollView;
  ...
  IBOutlet UITableView *tableView;
  IBOutlet NSLayoutConstraint *tableViewHeightConstraint;

创建了一个自定义的UITableViewCell(NWLocationTableViewCell),添加了一个属性并连接了storyboard中的outlet:

@interface NWLocationTableViewCell : UITableViewCell 
  IBOutlet UILabel *titleLabel;

这就是我试图在我的控制器中填充单元格的方式:

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

  static NSString *cellIdentifier = @"LocationCell";

  // Same with both tableView and thisTableView
  NWLocationTableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) 
      cell = [[NWLocationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:cellIdentifier];
  


  [cell.titleLabel setText:@"test"];

  // or

  UILabel *label = (UILabel *)[cell.contentView viewWithTag:2112];
  [label setText:@"test"];

  NSLog(@"%@, %@", cell.contentView.subviews, cell.class);

  return cell;

但是这两种方法都没有产生任何结果,因此我无法设置它的样式。添加任何静态对象(例如 UIButton)也不会显示。

日志显示:"(), NWLocationTableViewCell"

【问题讨论】:

您有任何错误吗?你怎么知道你没有得到一个细胞? 我不完全确定这是否会有所帮助,但请尝试将您的插座从牙套中取出。将它们声明为大括号下方和@end 之前的属性,例如@property (strong, nonatomic) IBOutlet UILabel *titleLabel; @rdelmar 没有错误,nil 表示没有单元格 @gsean 尝试了两种方法,但谢谢 您的意思是日志中的 nil 吗?这意味着没有标题标签和标签,不一定没有单元格。你应该只记录单元格。如果我没记错的话,如果 cellFroRowAtIndexPath 不返回任何单元格,则会出现错误。 【参考方案1】:

这是一个命名问题。

在您的方法标头中,您将thisTableView 作为要使用的tableView 传递,但随后您调用[tableView dequeueReusableCellWithIdentifier]; 来获取一个单元格。它应该会产生一个错误,但可能还有另一个同名的变量,或者一个属性?无论如何,如果那是您的逐字代码,那就是您的错误。

【讨论】:

是的,tableView是outlet引用的属性,但是使用thisTableView也会出现同样的情况 @ThomSeddon - 你介意改变你的问题,这样其他人就不会像我一样陷入同样的​​陷阱吗? 是的,我的意思是修复代码,而不是添加评论。我为你做了。不客气。 不幸的是,您的解决方案实际上并不是一个修复程序,我不确定它是否一定更正确,因此我使用了评论。 这是一个修复,因为它确实消除了一个错误,该错误只会被错误的命名约定(即命名一个 tableView tableView)所掩盖。此外,在委托方法中,您应该使用由 tableview 传递给委托的 tableView 对象,而不是某些类变量/属性/任何东西,这也必然是更正确的。如果您愿意,您仍然可以删除我的编辑。

以上是关于在 UIScrollView/UIView 内设置 UITableViewCell 样式的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView+UIView 而不是 UITableView+customcells?

UIScrollView 内的 UIView 没有收到触摸事件

UIScroll 视图 + UIView + UITableview 问题

从 UIScrollview UIView SubView 推送到另一个 ViewController

奇怪的滚动问题( UIScrollView )

获取 UIScrollView contentView 的高度