为什么这个popover segue以UITableViewController为中心?

时间:2015-04-23 15:15:13

标签: ios swift ios8

我花了很长时间尝试从tableview创建一个居中的popover。我最终设法让它发挥作用:

enter image description here

(我认为......)这些步骤:

  1. 将segue锚定到表格视图
  2. 在表视图控制器上设置“使用首选显式大小”: enter image description here
  3. 取消选中segue属性检查器中的所有“路线”选项。
  4. 使用以下方法在我的UITableViewController中实现UIPopoverPresentationControllerDelegate协议:

    func adaptivePresentationStyleForPresentationController(controller:UIPresentationController) - > UIModalPresentationStyle {     回来。没有 }

  5. 现在,我认为我不理解为什么这有效。

    如果我选中任何“路线”选项,则弹出框会显示在屏幕外。这是因为popover位于视图之外(目前占据整个屏幕)?如何确定锚点?

    建议使用首选显式大小吗?

1 个答案:

答案 0 :(得分:0)

使用UITableView作为锚点意味着当您使用箭头时,箭头会定位到对象的边缘,然后,如您所推测的那样,在屏幕上显示segued-to view controller。

如果您想要箭头,而不是将segue绑定到UITableView,您可以像我一样(按另一个Stack Overflow帖子的提示)并在表格视图后面放置一个隐藏的锚点按钮。然后在触摸单元格时,将按钮移动到触摸点,然后执行segue。

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
CGPoint tapPoint = CGPointMake(cell.frame.origin.x + cell.frame.size.width - (self.hiddenAnchorButton.frame.size.width / 2),
                                cell.center.y + self.tableView.frame.origin.y - self.tableView.contentOffset.y);
self.hiddenAnchorButton.center = tapPoint;

[self performSegueWithIdentifier:@"yourSegueName" sender:cell];