如何从 UITableViewCell 呈现 UIView
Posted
技术标签:
【中文标题】如何从 UITableViewCell 呈现 UIView【英文标题】:How to present UIView from UITableViewCell 【发布时间】:2017-05-06 12:01:18 【问题描述】:在我的应用程序中,我有一个 UITableViewCell
,其中有一个按钮。
- (void)buttonPressed:(id)sender
UIView *test = [[UIView alloc] initWithFrame:CGRectMake(self.frame.origin.y+5, self.frame.origin.x+53, 200, 200)];
test.backgroundColor = [UIColor redColor];
test.layer.cornerRadius = 15.0f;
test.layer.masksToBounds = YES;
[self addSubview:test];
但是,此红色视图显示在节标题后面。以正确的方式从UITableViewCell
内部将其添加到视图中的最佳方法是什么?
【问题讨论】:
使用 UItableView 的 viewForHeaderInSection 方法。 【参考方案1】:获取要添加的单元格,然后使用
[cell.contentView addSubview: test];
您可以通过将点转换为表格视图的坐标系并使用 UITableView 方法indexPathForRowAtPoint
从按钮的 frame.origin 获取单元格。该代码可能如下所示:
- (NSIndexPath *) indexPathForView: (UIView*) view;
CGPoint viewCenter = CGPointMake(
CGRectGetMidX(view.bounds),
CGRectGetMidY(view.bounds)
);
viewCenter = [self.tableView convertPoint: viewCenter fromView: view];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: viewCenter];
return indexPath;
或者更好的是,作为 UITableView 的扩展:
@implementation UITableView (indexPathForCellContainingView)
- (NSIndexPath *) indexPathForCellContainingView: (UIView *) view;
//get the view's center point (which will be in it's parent view's coordinate system
//And convert it to the table view's coorindate system
CGPoint viewCenter = [self convertPoint: view.center fromView: view.superview];
//Ask the table view which cell's index path contains that point.
return [self indexPathForRowAtPoint: viewCenter];
@end
【讨论】:
【参考方案2】:你可以试试这个:
- (void)buttonPressed:(id)sender
UIView *test = [[UIView alloc] initWithFrame:CGRectMake(5, 53, 200, 200)];
test.backgroundColor = [UIColor redColor];
test.layer.cornerRadius = 15.0f;
test.layer.masksToBounds = YES;
[self.contentView addSubview:test];
【讨论】:
如果您解释为什么您的建议会有所帮助,这个答案会更好。 在你的代码中 UIView *test = [[UIView alloc] initWithFrame:CGRectMake(self.frame.origin.y+5, self.frame.origin.x+53, 200, 200)];表示如果单元格位于其超级视图的 (0,0) 坐标中,则测试视图将具有坐标 (5,53)。但是如果单元格坐标是 (0,50) 那么 test 将有一个坐标 (55, 53)。 视图坐标是相对于其超级视图计算的。以上是关于如何从 UITableViewCell 呈现 UIView的主要内容,如果未能解决你的问题,请参考以下文章
如何从 UITableViewCell 获取当前位置(帧)?
从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例