0

我有一个表格视图,我在其中加载一些 UIButtons 并给它们动态标签。但是标签 = 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];
}

我哪里错了..?

4

3 回答 3

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];
}
于 2013-04-13T06:41:16.290 回答
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 * ) 说

于 2013-04-13T06:16:47.067 回答
0

默认值为tag0。这意味着视图层次结构中的每个视图都有一个tag0,除非有什么改变它。这包括您UITableViewUITableViewCell该表视图中的每个人。因此,例如,当您调用[cell viewWithTag:0]aUITableViewCell时,单元格将返回自身,除非您将单元格的值更改为tag0 以外的值。

尝试使用tag值 0 来查找特定按钮或任何其他视图根本不可行,除非您对视图层次结构有非常密切的控制。如果您使用UITableViewor UITableViewCell,则您没有足够的控制权,因为这些视图中的每一个都有私有子视图,其tag值很可能为 0。

于 2013-04-13T06:25:31.170 回答