我在UIViewController
内显示UITableViewController
来自iPhone的弹出式演示文稿时出现问题。我一直使用的代码用于显示来自任何其他UIViewController
的弹出窗口,而不是iPhone上的UITableViewController
。它可以在iPad上的UITableViewController
上运行。
执行代码时,视图会以模态方式临时显示(如果我没有实现adaptivePresentationStyleForPresentationController
),然后用黑色覆盖,就像发生某种自动布局错误一样(尽管有&# 39;在控制台中没有任何内容表示其他情况。)
正如我所提到的,以下内容适用于iPhone上的UITableViewController
以外,并且一直在iPad上运行。我确定我错过了一些相当简单的东西。有什么想法吗?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
/* Create label */
UILabel *label = [UILabel new];
label.text = @"This should be in a popover.";
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
/* Add label to new ViewController */
UIViewController *popoverVC = [UIViewController new];
[popoverVC.view addSubview:label];
label.translatesAutoresizingMaskIntoConstraints = NO;
[popoverVC.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[label]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)]];
[popoverVC.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)]];
/* Define ViewController to present as a popover and display */
popoverVC.modalPresentationStyle = UIModalPresentationPopover;
popoverVC.preferredContentSize = CGSizeMake(320, 50);
[self presentViewController:popoverVC animated:YES completion:nil];
/* Grab handle to ViewController's popoverPresentationController after displaying */
UIPopoverPresentationController *popoverController = [popoverVC popoverPresentationController];
if (popoverController == nil)
NSLog(@"popoverController is nil");
else {
popoverController.delegate = self;
popoverController.popoverLayoutMargins = UIEdgeInsetsMake(15, 15, 15, 15);
popoverController.sourceView = tableView;
popoverController.sourceRect = [tableView rectForRowAtIndexPath:indexPath];
self.definesPresentationContext = YES;
}
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection
{
NSLog(@"%s", __PRETTY_FUNCTION__);
return (UIModalPresentationNone);
}
FWIW:快速建立此代码原型的一种方法是将上述内容添加到{" Master-Detail Application" Xcode中的模板,并定义此消息以避免推送MasterViewController.m
:
DetailViewController
您还需要设置- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
return (NO);
}
以采用MasterViewController.h
协议。
答案 0 :(得分:1)
黑色的原因很简单。
您的控制器是透明的(您没有为其func +(left: CGPoint, right: CGVector) -> CGPoint { return CGPoint(x: left.x+right.dx, y: left.y+right.dy) }
设置任何背景颜色)。演示动画使其显示在表格视图上,但一旦动画结束,下面的视图将从层次结构中删除,最终会出现窗口背景颜色(默认为黑色)和带有黑色标签的透明控制器。
集
view
您将看到控制器正常运行。
我不确定为什么你的控制器没有显示为弹出窗口,因为你根据文档正确地做了一切。但是,移动
popoverVC.view.backgroundColor = [UIColor yellowColor];
成为该方法的最后一行解决了问题。注意:根据文档,这甚至不起作用。