如何在 Storyboard 中使用 dismiss an iPhone popover
How to use dismiss an iPhone popover in a Storyboard
我想使用Travis M.提供的解决方案来解决这个问题:
How to use dismiss an iPhone popover in an Adaptive Storyboard
但是,我需要将以下内容翻译成 objective c。
有人可以帮忙吗?
如果您想要的是 iPad 上的弹出窗口,但 iPhone 上带有关闭按钮的模态 sheet,那么您无需在弹出窗口的故事板。
在 Xcode 6.3 故事板中,您只需连接一个视图控制器并将 segue 指定为 "Present as Popover"
下面的代码应该放在与弹出框相连的视图控制器中,而不是弹出框本身:
首先设置弹出窗口委托:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "myPopoverSegueName") {
let vc = segue.destinationViewController
vc.popoverPresentationController?.delegate = self
return
}
}
然后添加委托扩展(在视图控制器的代码下方)并即时创建导航控制器/关闭按钮:
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
然后添加委托扩展(在视图控制器的代码下方)并即时创建导航控制器/关闭按钮:
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
然后你添加你的 dismiss 函数,你应该可以开始了:
func dismiss() {
self.dismissViewControllerAnimated(true, completion: nil)
}
这与 objective-c 没有什么不同。您可能仅通过查看它就可以弄清楚发生了什么。它只是为 segue 做准备并实施协议的一部分。
myViewController 需要声明自己符合 UIAdaptivePresentationControllerDelegate。然后就是代码了
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"myPopoverSegueName"]) {
UIViewController *viewController = segue.destinationViewController;
viewController.popoverPresentationController.delegate = self
}
}
- (UIViewController *)presentationController:(UIPresentationController *)controller
viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller.presentedViewController];
navController.topViewController.navigationItem.leftBarButtonItem = doneButton;
}
-(void) dismiss
{
[self dismissViewControllerAnimated:YES completion:nil];
}
您不需要使用扩展程序或类别。不打算保证这是否像 Travis M. 所说的那样。
我想使用Travis M.提供的解决方案来解决这个问题: How to use dismiss an iPhone popover in an Adaptive Storyboard
但是,我需要将以下内容翻译成 objective c。
有人可以帮忙吗?
如果您想要的是 iPad 上的弹出窗口,但 iPhone 上带有关闭按钮的模态 sheet,那么您无需在弹出窗口的故事板。
在 Xcode 6.3 故事板中,您只需连接一个视图控制器并将 segue 指定为 "Present as Popover"
下面的代码应该放在与弹出框相连的视图控制器中,而不是弹出框本身:
首先设置弹出窗口委托:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "myPopoverSegueName") {
let vc = segue.destinationViewController
vc.popoverPresentationController?.delegate = self
return
}
}
然后添加委托扩展(在视图控制器的代码下方)并即时创建导航控制器/关闭按钮:
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
然后添加委托扩展(在视图控制器的代码下方)并即时创建导航控制器/关闭按钮:
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
然后你添加你的 dismiss 函数,你应该可以开始了:
func dismiss() {
self.dismissViewControllerAnimated(true, completion: nil)
}
这与 objective-c 没有什么不同。您可能仅通过查看它就可以弄清楚发生了什么。它只是为 segue 做准备并实施协议的一部分。
myViewController 需要声明自己符合 UIAdaptivePresentationControllerDelegate。然后就是代码了
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"myPopoverSegueName"]) {
UIViewController *viewController = segue.destinationViewController;
viewController.popoverPresentationController.delegate = self
}
}
- (UIViewController *)presentationController:(UIPresentationController *)controller
viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller.presentedViewController];
navController.topViewController.navigationItem.leftBarButtonItem = doneButton;
}
-(void) dismiss
{
[self dismissViewControllerAnimated:YES completion:nil];
}
您不需要使用扩展程序或类别。不打算保证这是否像 Travis M. 所说的那样。