UITableViewCell上视图标记的最大限制是什么

时间:2010-09-24 08:21:14

标签: iphone

我把一个DragView(UIView的子类)放在带标签的UITableViewCell上(行+ 20000)

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

   NSInteger row=[indexPath row];
   NSInteger section=[indexPath section];
   static NSString *SimpleTableIdentifier1 = @"CellTableIdentifier";
   UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier: SimpleTableIdentifier1 ];
   if  (cell == nil) {
      cell=[[[UITableViewCell alloc] initWithFrame:CGRectZero 
      CGRect dragRect =CGRectMake(12.0f,6.0f,24.0f,24.0f);
      DragView *dragger =[[DragView alloc]  initWithFrame:dragRect];
      [dragger setTag: row+20000 ];

   }
   DragView *newDragger=(DragView*)[cell viewWithTag: row+20000 ];//error

   //......
   return cell;
}

但是当我尝试使用代码(带有'error'的行标记)来访问DragView时,调试器显示newDragger返回0x0,这意味着没有对象。

我不知道哪里出错了。我只是猜测可能存在maximium tag数量限制的原因)

欢迎任何评论。

由于

InterDev中

2 个答案:

答案 0 :(得分:1)

标签属性具有NSInteger类型,并且可以具有NSInteger可以容纳的任何值,因此20000不应该导致问题。

您发布的代码肯定缺少一些细节 - 您是否真的将拖动器放入您的单元格?另请注意,建议不要直接将子视图添加到UITableViewCell - 您必须将它们添加到单元格的contentView中:

[cell.contentView addSubView: dragger];

稍后再访问:

DragView *newDragger=(DragView*)[cell.contentView viewWithTag: row+20000 ];

另请注意,当表重用单元格时,您的代码将无效,即当单元格用于与最初创建的行不同的行时,您将尝试访问带有错误标记的子视图。

P.S。另请参阅此问题Detecting which UIButton was pressed in a UITableView。它处理按钮,但也可能对您的自定义视图有所帮助。

答案 1 :(得分:0)

单元格可能来自dequeueReusableCellWithIdentifier:方法,此单元格的前一行编号可能是其他人。因此,标签不可信任。