我以编程方式设置了一个popover,并尝试将其呈现出来 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
使用以下代码:
popoverView.popoverContentSize = CGSizeMake(580, 760);
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
[popoverView presentPopoverFromRect:cell.bounds inView:tableView permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
这样可以正常工作,但它会忽略大小,因此视图会被切断,因为单元格位于屏幕中间附近。当我将其更改为(UIPopoverArrowDirectionRight | UIPopoverArrowDirectionLeft)时,它也会忽略它并向上或向下显示弹出窗口。
我想要的是将popover显示在靠近单元格的左侧,以便它有空间可以打开到侧面,但每当我尝试编辑rect时,我会在tableview中遇到很多错误从...显示我尝试了很多不同的方法,例如:
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
CGRect frame = CGRectMake(cell.bounds.origin.x, cell.bounds.origin.y, cell.bounds.size.width/4, cell.bounds.size.height);
[popoverView presentPopoverFromRect:frame inView:tableView permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
无论我做什么,除非我使用第一个代码(FromRect:cell.bounds inView:tableView),否则会出现以下两个错误:
断言失败 - [UIPickerTableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim / UIKit-2935.137 / UITableView.m:8357 *
由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'未设置UITableView数据源'*
但是tableview数据源肯定是设置的,当我尝试更改弹出窗口的矩形时,我只会遇到这些错误。我还尝试手动计算单元格的位置来获取框架而不是使用单元格,也就是通过将indexPath.row的单元格高度乘以y值...
关于为什么我会收到这些错误的任何想法?或者我如何从tableview中正确显示完整的弹出窗口?
编辑:此外,我根据单元格的边界获取单元格并创建框架没有问题。错误来自的行始终位于“presentPopoverFromRect:”行。
解决方案:我终于能够在没有任何错误的情况下实现使用CGRectOffset而不是来自单元格中心的popover所需的效果:
CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath] toView:tableView];
[popoverView presentPopoverFromRect:CGRectOffset(rect, -400, 0) inView:tableView permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
另一个编辑:非常奇怪的是,该代码适用于我测试它的第一部分。但是我的tableview有2个部分,并且出于某种原因,popover在第二部分工作正常部分,但我仍然在第一部分得到错误?关于错误的任何想法??
答案 0 :(得分:0)
使用tableview' rectForRowAtIndexPath
方法获取rect
试试这个,
CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath:indexPath]
toView:tableView];
[popoverController presentPopoverFromRect:rect
inView:tableView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
答案 1 :(得分:0)
您的代码示例不太正确:
[popoverView presentPopoverFromRect:cell.bounds inView:tableView permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
请记住cell.bounds
的原点是(0,0),即bounds
rect相对于单元格的坐标系。因此,inView
参数应为cell
:
[popoverView presentPopoverFromRect:cell.bounds inView:cell permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
或者,您可以使用cell.frame
在表格视图的坐标系中指定单元格的矩形:
[popoverView presentPopoverFromRect:cell.frame inView:tableView permittedArrowDirections:(UIPopoverArrowDirectionAny) animated:YES];
希望能让你走上正确的道路。
<强>更新强>
此外,报告并解决了同样的错误in this question。