我在tableView中有一个按钮,表现不像我想要的那样。
我已将我的按钮初始化放在tableView cellForRowAtIndexPath中的cell == nil块中。当我将它移出此块时,按钮被多次绘制,所有其他按钮位于顶部,因此我无法移动它(除非设置错误)。
我的按钮是一个简单的绿色勾号或红色十字,并设有选择器。 tableView中的每个行高度根据其中的文本数量而有所不同。然而,我的按钮,当在单元格==零部分时,不考虑cell.frame.height。它从第一次初始化tableView时重用单元格的高度。
这是按钮的代码:
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button =[[UIButton alloc]init];
float framePos_x = cell.frame.size.width/1.30;
float framePos_y = cell.frame.size.height - 55;
NSLog(@"%f",cell.frame.size.height);
button.frame = CGRectMake(framePos_x, framePos_y, 35, 35);
buttonImage = [UIImage imageNamed:@"Notification_Accepted"];
buttonImage_Pressed = [UIImage imageNamed:@"Notification_Reject"];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button setImage:buttonImage_Pressed forState:UIControlStateSelected];
button.tag = [UserID intValue];
[button addTarget:self action:@selector(ResponseFlagButton:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:button];
我的NSLog的输出是:
2014-08-03 17:03:49.724 TableApp[5540:60b] 120.000000
2014-08-03 17:03:49.774 TableApp[5540:60b] 100.000000
2014-08-03 17:03:49.853 TableApp[5540:60b] 100.000000
2014-08-03 17:03:49.936 TableApp[5540:60b] 100.000000
2014-08-03 17:03:51.287 TableApp[5540:60b] 100.000000
当此日志位于cell = nil块内时,即使向上和向下滚动,它也会输出。在cell = nil块之外,它工作正常 - 与按钮相同(除了它的重绘问题)。
如果每次都没有将按钮放在旧按钮的顶部,我将如何获取按钮。还考虑到可变单元高度?
答案 0 :(得分:1)
子类UITableViewCell
并在单元格的frame
方法中计算按钮的layoutSubviews
。
答案 1 :(得分:1)
我相信你需要继承UITableViewCell并实现prepareForReuse方法。在prepareForReuse中,您将删除该按钮。不是100%肯定会解决您所描述的问题。
对UITableViewCell进行子类化也可以更容易地计算按钮大小。
答案 2 :(得分:1)
我会结合Michal和Lev的答案。