获取 UITableViewCellAccessoryDe​​tailButton 的框架(为 nil)

Get the frame of UITableViewCellAccessoryDetailButton (which is nil)

我试图从 UITableViewCell 的 accessoryView 中显示弹出窗口。该视图是默认的 UITableViewCellAccessoryDetailButton。显然 accessoryView 是 nil,并且根据 this question,这是预期的行为。我的问题是,即使 accessoryView 属性 为 nil,我如何获得附件的框架?

您无需获取框架即可显示弹出框。当你有一个附属视图时,单元格的 contentView 的宽度会变窄,所以它就在附属视图之前结束(如果你给 contentView 一个背景颜色,你可以看到这一点)。您可以使用该宽度将弹出窗口定位在按钮的左侧,

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
    UIPopoverController  *aPopover = [[UIPopoverController alloc] initWithContentViewController:[UIViewController new]];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    CGRect popRect = CGRectMake(cell.frame.origin.x + cell.contentView.frame.size.width, cell.frame.size.height/2.0, 1, 1);
    [aPopover presentPopoverFromRect:popRect inView:cell permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
}