我有一个表视图,在其中我加载了一些UIButtons,并为它们提供了动态tags.But tag=0没有针对UIButton进行更新。我不明白错误在哪里。
int i=-1;
@synthesize......
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
btnTemp = [[UIButton alloc]initWithFrame:CGRectMake(10,lblName.frame.origin.y+lblName.frame.size.height+3,17, 17)];
[btnTemp addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btnTemp.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[btnTemp setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btnTemp.titleLabel.font =[UIFont systemFontOfSize:14.f];
btnTemp.tag=++i;
return cell;
}但第一次进入此方法时,UIButtons标记值没有更新为0。
-(IBAction) btnClicked:(UIButton *) sender{
UIButton *button = (UIButton *)sender;
NSLog(@"%d", [button tag]);
UIButton *btnTemp = (UIButton*)[cell viewWithTag:0]; //Here UIButton is being converted to UItableViewCell and getting error.
[buttonsinaSection addObject:btnTemp];
}我哪里错了..?
发布于 2013-04-13 14:16:47
-(void) btnClicked:(UIButton *) sender
{
NSLog(@"%d", [sender tag]);
[buttonsinaSection addObject:sender];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
btnTemp = [[UIButton alloc]initWithFrame:CGRectMake(10,lblName.frame.origin.y+lblName.frame.size.height+3,17, 17)];
[btnTemp addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
btnTemp.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[btnTemp setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
btnTemp.titleLabel.font =[UIFont systemFontOfSize:14.f];
btnTemp.tag=indexpath.row;
return cell;
}嘿,在btnClicked操作中,您再次使用ViewWithTag:0..因此,默认情况下,在View上,每个对象都会有一个标签= 0..因此,您将在(UIButton *)表示的btnClicked中获取按钮实例
发布于 2013-04-13 14:25:31
tag的默认值为0。这意味着视图层次结构中的每个视图的tag都为0,除非有什么东西改变了它。这包括您的UITableView和该表视图中的每个UITableViewCell。因此,例如,当您在UITableViewCell上调用[cell viewWithTag:0]时,除非您将单元格的tag更改为非0,否则该单元格将返回自身。
尝试使用tag值0来查找特定按钮或任何其他视图是不可行的,除非您对视图层次结构有非常严格的控制。如果您使用的是UITableView或UITableViewCell,则无法进行足够的控制,因为这些视图中的每个视图都有可能具有tag值0的私有子视图。
发布于 2013-04-13 14:41:16
当你写的时候:
btnTemp.tag=++i;对于每个单元格,btnTemp的标记变为0。
所以你应该这样写:
btnTemp.tag=indexPath.row;和,
UIButton *btnTemp = (UIButton*)[cell viewWithTag:0];将给出错误,因为不能在cellForRowAtIndexPath:外部调用[cell viewWithTag:0]方法
-(void) btnClicked:(UIButton *) sender
{
UIButton *button = (UIButton *)sender;
[buttonsinaSection addObject:button];
}https://stackoverflow.com/questions/15984816
复制相似问题