UI按钮不在UITableViewCell中更新其标记值

时间:2013-04-13 06:05:30

标签: iphone ipad uitableview uibutton xcode4.5

我有一个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];
}

我哪里出错..?

3 个答案:

答案 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来查找特定按钮或任何其他视图是不可行的,除非您对视图层次结构有非常严密的控制。如果您使用的是UITableViewUITableViewCell,则表示您没有足够的控制权,因为每个视图都有私有子视图,其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];
}