【问题标题】:A UIButton in a UITableViewCell & getting bounds/frameUITableViewCell 中的 UIButton 和获取边界/框架
【发布时间】:2010-07-14 18:24:11
【问题描述】:

我在 UITableView 单元格中的 UITableView 中有一个 UIButton。结果是一个带有按钮的列表。当 UIButton 被按下时,它会调用一个 touchUpInside 方法,一切都很好。我遇到的问题是我想在按下按钮时从按钮的位置(框架)缩小新视图。如果我只是得到 UIButton 的边界

origButton.frame

它位于 UITableCell 的坐标中,例如 3,50,40,25。这对于列表中的所有按钮都是相同的,所以无论列表中的哪个按钮被按下,我都会得到这些坐标。现在,如果我真的抓住了我的观点的坐标

self.frame

当调用 touchUpInside 方法时,我得到了一些更有用的东西。然后我得到我的单元格的坐标。伟大的!!所以我可以从 UIButton 中缩小一个新视图。太好了!!

但问题是:如果您向上滚动列表,点按按钮,则视图不会从按钮缩小,而是从屏幕下方的位置缩小。问题是,在向上滚动之前,我拥有的坐标是用于单元格的。事实上,所有单元格的所有坐标都反映了它们在表格中的实际位置,只有第一个可见集的坐标可用。滚动并没有改变这些坐标。

我想也许我可以使用超级视图的坐标,但这些都没有帮助。

任何人都知道如何获取表格中列出的按钮(或视图或任何其他项目)的准确坐标,还是不可能?

这是我计算新视图中心点的方法:

floatingView.center = CGPointMake(origButton.frame.origin.x + 
                                  origButton.frame.size.width / 2,
                         self.frame.origin.y + self.superview.frame.origin.y);

谢谢!

【问题讨论】:

    标签: iphone uitableview


    【解决方案1】:

    更新:

    记住 UITableView 是一个滚动视图。所以它在 tableView (滚动视图)中嵌入了 contentView。

    您收到的框架是正确的,但它不是参考您想要的视图框架。相反,框架是对 contentView 的引用。当您滚动时,单元格不会更改对 contentView.frame 的引用。但是,contentView.frame 确实会在您滚动时参考 tableView 的框架发生变化(按 contentOffset 的量)。

    所以这留下了2个选择:

    使用以下方法之一将单元格的框架从 contentView 的引用转换为 tableView:

     - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view
    
     - (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view
    

    或者,手动从帧中减去 contentOffset。

    我推荐第一种方法。


    原答案:

    我不确定您是继承 UITableViewCell 还是从 UITableViewController 执行此代码。

    但是,我认为你想要的方法是:

    - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath
    

    这是 UItableView 的一种方法,可以为您获取任何单元格的矩形。

    【讨论】:

    • 看到这个我很兴奋。但是返回的坐标与 self.frame 的坐标相同。 (我有 UITableViewCell 的子类,我的 UIButton 的 touch 方法在子类中。)上面是 self.frame 的替代品。以下是值的示例: 单击表格第一“页”中的单元格:0,158,32,480 单击更下方的单元格:0,222,32,480 滚动表格以显示下面的单元格,然后单击一个:0, 2238,32,480 还有其他想法吗?
    • 谢谢。而已!这是我使用它的方式:CGRect cellFrame = [self.superview convertRect:self.frame toView:tableViewController.view];
    【解决方案2】:

    我试图做一些非常相似的事情。 On the iPad, when a table cell is selected, I wanted to show a popup next to the cell.以下代码适用于做这样的事情。在这种情况下,self 是一个 UITableViewController。

    CGRect rect = [cell.superview convertRect:cell.frame toView:self.view];
    

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多