在 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 - 你介意改变你的问题,这样其他人就不会像我一样陷入同样的陷阱吗? 是的,我的意思是修复代码,而不是添加评论。我为你做了。不客气。 不幸的是,您的解决方案实际上并不是一个修复程序,我不确定它是否一定更正确,因此我使用了评论。 这是一个修复,因为它确实消除了一个错误,该错误只会被错误的命名约定(即命名一个 tableViewtableView
)所掩盖。此外,在委托方法中,您应该使用由 tableview 传递给委托的 tableView 对象,而不是某些类变量/属性/任何东西,这也必然是更正确的。如果您愿意,您仍然可以删除我的编辑。以上是关于在 UIScrollView/UIView 内设置 UITableViewCell 样式的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView+UIView 而不是 UITableView+customcells?
UIScrollView 内的 UIView 没有收到触摸事件
UIScroll 视图 + UIView + UITableview 问题