我把一个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中
答案 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:方法,此单元格的前一行编号可能是其他人。因此,标签不可信任。