2009-12-28 70 views
0

我有在具有一个UILabel作为一个子视图,当我设置标签的文本表视图细胞时,它决不会在细胞中。我有点在iPhone开发一个小白,我不知道我做错了什么......UITableViewCell中的UILabel子视图不显示。 (iPhone开发)

我创造,在我的表视图的委托的cellForRowAtIndexPath返回以下细胞:

 

cell = [[[ActivityCell alloc] initWithFrame: 
    CGRectZero reuseIdentifier:ColumnedCell] autorelease]; 

CGRect frame = CGRectMake(180.0, 11.0, 130.0, 22); 

UILabel *valueField = [[UILabel alloc] initWithFrame:frame]; 
[valueField setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; 
valueField.tag = 111; 
valueField.textAlignment = UITextAlignmentRight; 
valueField.textColor = [UIColor colorFromHex:@"326799"]; 
valueField.highlightedTextColor = [UIColor whiteColor]; 
valueField.baselineAdjustment = UIBaselineAdjustmentAlignCenters; 
valueField.adjustsFontSizeToFitWidth = YES; 

[cell.contentView addSubview:valueField]; 
[valueField release]; 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

 

我再想以后通过这样设置的UILabel(子视图)(我目前在viewDidAppear此代码):

 

ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath: 
    [NSIndexPath indexPathForRow:0 inSection:1]]; 

UITextField *valueField = (UITextField *)[cell viewWithTag:111]; 
valueField.text = @"foo"; 
 

但这个词“富”一直没有出现在U ILabel。我相信,它显示了当我< = 2.2 SDK编译,但我想要得到这个与3.0+

为什么文本显示不出来任何想法的工作?

跟进:

请看看这个问题,作为跟进这个:UITableViewCell's textLabel is overlapping a subview label, how can I fix it? (iPhone Dev)

回答

0

它看起来像你有一个小错误:

变化

UITextField *valueField = (UITextField *)[cell viewWithTag:111]; 

UITextField *valueField = (UITextField *)[cell.contentView viewWithTag:111]; 
+0

没有运气好的话,valueField.text看起来像它的设置(通过NSLog的),但它不会在视图中显示出来。 – mmattax 2009-12-28 20:04:37

0

我的猜测是,回来的细胞是零,因此不更新你的文字。我就开始购买,确保你从该行得到一个细胞回:

ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; 
+0

单元格不为空... – mmattax 2009-12-28 21:25:54

2

好第一关,你要创建一个UILabel,标记它作为111,然后将其添加为一个子视图到该单元的内容查看。稍后,您正在尝试检索该UILabel,但将其转换为UITextField。从根本上说,你在这里做的事情是错误的。

这里就是我建议这样做:

  1. 看看苹果的指南using Interface Builder to create cells。这将导致更少的代码,并且您将能够轻松查看正在发生的事情,并且不必以编程方式添加Label/TextField。
  2. ,而不是试图直接访问细胞viewDidAppear和改变他们的子视图,你应该做的所有的显示逻辑的cellForRowAtIndexPath内。在另一种方法(例如,一个当用户触摸一个按钮时调用),即可修改某些数据结构,然后发送的tableView的reloadData消息。那时,cellForRowAtIndexPath被再次调用,并且数据结构中设置的值决定了单元格的创建方式。
-1
cell = [[[ActivityCell alloc] initWithFrame: 
    CGRectZero reuseIdentifier:ColumnedCell] autorelease]; 


你的细胞具有CGRectZero的框架

+0

表格单元格初始化的框架通常是不相关的,因为UITableView可以管理单元格的许多其他方面。这可能是为什么'UITableViewCell' -'-initWithStyle:reuseIdentifier:'-now的指定初始值设定项完全消除了“frame”参数。 – 2009-12-28 22:23:55