首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIbutton未更新其在UITableViewCell中的标记值

UIbutton未更新其在UITableViewCell中的标记值
EN

Stack Overflow用户
提问于 2013-04-13 14:05:30
回答 3查看 538关注 0票数 0

我有一个表视图,在其中我加载了一些UIButtons,并为它们提供了动态tags.But tag=0没有针对UIButton进行更新。我不明白错误在哪里。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
-(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];
}

我哪里错了..?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-13 14:16:47

代码语言:javascript
运行
复制
-(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中获取按钮实例

票数 0
EN

Stack Overflow用户

发布于 2013-04-13 14:25:31

tag的默认值为0。这意味着视图层次结构中的每个视图的tag都为0,除非有什么东西改变了它。这包括您的UITableView和该表视图中的每个UITableViewCell。因此,例如,当您在UITableViewCell上调用[cell viewWithTag:0]时,除非您将单元格的tag更改为非0,否则该单元格将返回自身。

尝试使用tag值0来查找特定按钮或任何其他视图是不可行的,除非您对视图层次结构有非常严格的控制。如果您使用的是UITableViewUITableViewCell,则无法进行足够的控制,因为这些视图中的每个视图都有可能具有tag值0的私有子视图。

票数 0
EN

Stack Overflow用户

发布于 2013-04-13 14:41:16

当你写的时候:

代码语言:javascript
运行
复制
 btnTemp.tag=++i;

对于每个单元格,btnTemp的标记变为0。

所以你应该这样写:

代码语言:javascript
运行
复制
 btnTemp.tag=indexPath.row;

和,

代码语言:javascript
运行
复制
 UIButton  *btnTemp = (UIButton*)[cell viewWithTag:0];

将给出错误,因为不能在cellForRowAtIndexPath:外部调用[cell viewWithTag:0]方法

代码语言:javascript
运行
复制
-(void) btnClicked:(UIButton *) sender
{
  UIButton *button = (UIButton *)sender;
  [buttonsinaSection addObject:button];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15984816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档