我有一个tableview,我在其中加载一些UIButtons并给它们动态标签。但是UIButton没有更新tag = 0。我无法理解这个错误......
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];
}
我哪里出错..?
答案 0 :(得分:0)
-(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 ..所以,你将获得btnClicked中的按钮实例在这里(UIButton *)说
答案 1 :(得分:0)
tag
的默认值为0.这意味着视图层次结构中的每个视图的tag
都为0,除非有更改。这包括该表视图中的UITableView
和每个UITableViewCell
。因此,例如,当您在[cell viewWithTag:0]
上调用UITableViewCell
时,除非您已将单元格的tag
更改为0以外的其他值,否则该单元格将自行返回。
尝试使用tag
值0来查找特定按钮或任何其他视图是不可行的,除非您对视图层次结构有非常严密的控制。如果您使用的是UITableView
或UITableViewCell
,则表示您没有足够的控制权,因为每个视图都有私有子视图,其tag
值可能为0。
答案 2 :(得分:0)
当你写:
btnTemp.tag=++i;
对于每个单元格,btnTemp的标签变为0。
所以你应该写:
btnTemp.tag=indexPath.row;
和
UIButton *btnTemp = (UIButton*)[cell viewWithTag:0];
会给你错误,因为[cell viewWithTag:0]
方法不能在 cellForRowAtIndexPath之外调用:
-(void) btnClicked:(UIButton *) sender
{
UIButton *button = (UIButton *)sender;
[buttonsinaSection addObject:button];
}