模态视图控制器和 DefinePresentationContext 的问题

2023-12-29

我使用以下命令创建了一个自定义容器视图控制器新的 UIViewController 容器视图控制器方法 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW81在 iOS 5 中。

问题是,即使我的容器控制器的子 UIViewController 有definesPresentationContext = YES http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/definesPresentationContext,当它创建并呈现另一个模态视图控制器 http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html,UIKit 将容器(而不是子容器)设置为呈现控制器。

例如,在 MyChildViewController.m 中:

- (void)showMailComposeView:(id)sender {

    __block MFMailComposeViewController *vc =
            [[MFMailComposeViewController alloc] init];
    vc.mailComposeDelegate = self;
    vc.subject = @"Subject";

    self.definesPresentationContext = YES;

    [self presentViewController:vc animated:YES completion:^{

       if ([self.modalViewController isEqual:vc])
            NSLog(@"This should print...");

       if ([vc.presentingViewController isEqual:self.parentViewController])
            NSLog(@"... but this shouldn't");

       // NOTE: Both log statements printed

    }];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error
{ 
    [self dismissViewControllerAnimated:YES completion:^{}];

    // NOTE: self.parentViewController.view now displays instead of self.view
}

我哪里错了?

我如何确保它是child当模态视图(而不是容器视图)被关闭时,哪个视图会被显示?


在呈现视图控制器之前添加此行:

vc.modalPresentationStyle = UIModalPresentationCurrentContext

如果您已经在视图控制器链上完成了所有正确的父子操作,这将导致呈现的视图替换 MyChildViewController 的视图,然后当呈现的视图被关闭时,MyChildViewController 的视图将返回。

哦,我忘了提一下,即便如此,这也只能在 iPad 上运行。呈现的视图控制器的视图始终占据 iPhone 上的整个屏幕 - 它始终从根视图呈现。

EDIT:从 iOS 8 开始,此功能在 iPhone 上也可用。 (弹出窗口和分割视图也是如此 - 基本上,大多数“仅在 iPad 上”形式的声明在 iOS 8 中都变成了错误,在我看来,这是一个很棒的消息。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模态视图控制器和 DefinePresentationContext 的问题 的相关文章

  • 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

    好吧 我正在寻找一种方法来更改我的微调器图像并使用自定义图像 有什么建议吗 我创建了一个UIActivityIndi catorView 的子类 https github com cncool CDActivityIndicatorView
  • UITextField:键盘出现时移动视图

    我目前正在开发一个具有单个视图的 iPhone 应用程序 该应用程序有多个 UITextFields 用于输入 当键盘显示时 它会覆盖底部的文本字段 所以我添加了相应的textFieldDidBeginEditing 方法 将视图向上移动
  • 拖动调整 NSView(或其他对象)的大小

    我正在尝试构建一个应用程序 允许用户使用可以调整大小的矩形边界框来指定图像的多个区域 到目前为止 我已经有一个NSScrollView其中包含一个NSImageView这样用户就可以放大图像并根据需要滚动 我目前的想法是我可以使用NSVie
  • 如何在 iOS 中将 NSData 变量转换为 NSInteger 变量

    我有以下返回的 api 方法NSData 我在另一个视图控制器中调用了这个方法 如何转换NSData to NS整数 NSData getBusXMLAtStop NSString stopnumber NSMutableURLReques
  • 继承属性,从 readonly 继承的属性中读写时不会合成 setter

    我在使用属性时发现了一个奇怪的行为 该属性被继承为只读 然后在继承的类中重新声明为读写 In A h interface A NSObject property nonatomic strong readonly NSObject some
  • 有没有办法直观地看到精灵套件的 SKPhysicsbody 边界线?

    我在用bodyWithPolygonFromPath定义物理体的体积 我使用http dazchong com spritekit http dazchong com spritekit 获取所需的路径 但路径似乎不正确 我希望查看物理体路
  • 无法使用 MFMailComposeViewController 从应用程序发送电子邮件

    我在尝试从我的应用程序发送电子邮件时遇到了一些困难 我尝试了 iCodeBlog 中的这段代码 http icodeblog com 2009 11 18 iphone coding tutorial in application emai
  • [UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]

    我正在使用表格视图来显示消息 我使用了下面的代码 UIView chatView self bubbleView NSString stringWithFormat message from YES self chatArray addOb
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 无法禁用 CALayer>>removeFromSuperlayer 的动画

    我希望从其超级层中删除 CALayer 而无需设置动画 这里发生的事情是图层动画到一个位置 效果很好 但是当动画停止时 执行此代码 将图层返回到其开始位置 并淡出 大概然后从超级层中删除 如何阻止它动画 removeFromSuperlay
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • 如何缩放曼德尔布罗集

    我已经成功实现了维基百科文章中所述的曼德尔布罗集 但我不知道如何放大特定部分 这是我正在使用的代码 void createSetWithWidth int width Height int height Thing void int int
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 增加 iPhone 的推送通知徽章

    是否可以在收到通知时增加徽章值 或者我应该将计数作为有效负载发送吗 如果我每次都将徽章值发送为 1 那么如果应用程序未打开 我如何增加应用程序图标中的徽章值 我已经使用了这段代码 但不起作用 void application UIAppli
  • 将 NSFetchedResultsController 添加到项目后出现问题

    我设置 CoreData 时没有NSFetchedResultsController一切都保存得很好 切换到之后NSFetchedResultsController 我在尝试保存图像时遇到奇怪的错误 这是我用来保存图像的代码 void sa
  • Objective-C 点表示法与类方法?

    请注意 我特别指的是点表示法与类方法一起使用 而不是与实例方法一起使用 出于好奇 我想看看如果我尝试在类方法中使用 Objective C 点表示法语法会发生什么 我的实验如下 import
  • dispatch_semaphore_t 重用 - 我在这里缺少什么?

    我有一些代码 其中使用dispatch semaphore t 来表示操作完成 当信号量是成员变量时 它的行为似乎不正确 我将展示有效的示例代码和似乎无效的示例代码 implementation someClass dispatch sem

随机推荐