UITableView和UIButton重叠而不考虑Cell Height

时间:2014-08-03 16:09:09

标签: ios objective-c uitableview uibutton

我在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块之外,它工作正常 - 与按钮相同(除了它的重绘问题)。

如果每次都没有将按钮放在旧按钮的顶部,我将如何获取按钮。还考虑到可变单元高度?

3 个答案:

答案 0 :(得分:1)

子类UITableViewCell并在单元格的frame方法中计算按钮的layoutSubviews

答案 1 :(得分:1)

我相信你需要继承UITableViewCell并实现prepareForReuse方法。在prepareForReuse中,您将删除该按钮。不是100%肯定会解决您所描述的问题。

对UITableViewCell进行子类化也可以更容易地计算按钮大小。

答案 2 :(得分:1)

我会结合Michal和Lev的答案。

  1. 将UITableViewCell子类化,并使按钮成为属性。
  2. 在单元格自己的实例化过程中实例化按钮。这样您只需添加一次按钮。
  3. 覆盖UITableViewCell子类的prepareForReuse方法,并根据需要仅更改按钮的外观。
  4. 覆盖UITableViewCell子类的layoutSubviews方法,并计算并设置单元格的新高度。 (你在这里实现自己的自定义内在大小。很酷!)