Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >显示当前上下文上的视图控制器是模态的,不能正确旋转。

显示当前上下文上的视图控制器是模态的,不能正确旋转。
EN

Stack Overflow用户
提问于 2018-07-29 02:32:56
回答 1查看 1.4K关注 0票数 2

这与iOS 11.4、Swift 4和Xcode 9有关。

我试图在当前上下文上显示一个视图控制器,这样底层的上下文就会变暗,但仍然是可见的。我这样做的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let storyboard = UIStoryboard(name: "Main", bundle: nil)l
let vc = storyboard.instantiateViewController(withIdentifier: "LoginView") as! LoginViewController
vc.modalPresentationStyle = .overCurrentContext
vc.modalTransitionStyle   = .coverVertical

present(vc, animated: true, completion: nil)
                
let ppc = vc.popoverPresentationController
                
ppc?.sourceView = tableView
ppc?.sourceRect = tableView.bounds
ppc?.delegate = vc

LoginViewController有一个以它的mainview为中心的视图(popview),其中包含我的可编辑控件。这在一开始很好,但我遇到了一些问题:

  1. 提出的视图控制器的行为模态。也就是说,我不能通过点击外部popview来排除它。正如我所假设的那样,这是因为呈现视图控制器视图从未接收到触摸事件,因为它们被呈现的视图所捕获。
  2. 当设备旋转到景致时,只有部分屏幕被LoginViewController的模糊视图填充。

我试图通过为LoginViewController的主视图使用passtrough视图来修复问题1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
{
    let view = super.hitTest(point, with: event)
    return view == self ? nil : view
}

这没什么用。我可以在主视图上使用一个UITapGestureRecognizer,如果触控不是流行视图,我可以从那里调用dismiss,但对我来说,这似乎相当笨拙,我想知道是否有更好的方法。

我不知道如何解决问题2,我尝试了UIPopoverPresentationController的委托函数,但这也不起作用,因为当我使用.overCurrentContext时,vc.popoverPresentationController总是为零。

当我将modalPresentationStyle设置为.popover时,我会为popoverPresentationController获得一个值,但超过我的LoginView将完全涵盖呈现控制器视图。

EN

回答 1

Stack Overflow用户

发布于 2018-07-29 05:07:01

经过进一步的挖掘,我最终找到了一个解决问题2的方法,用Android的方式:

呈现的视图控制器中,我添加了以下函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
{
    if (loginViewController != nil)
    {
        present(loginViewController!, animated:false, completion: nil)
    }
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
    super.viewWillTransition(to: size, with: coordinator)

    loginViewController!.dismiss(animated: false, completion: nil)

}

因此,当一个方向更改传入时,popover视图首先被取消,并且在执行更改之后,弹出再次出现。由于呈现的视图控制器在此过程中没有受到损害,即使已经输入到呈现视图控制器的控件中的数据也仍然存在。

为了解决问题1,我在呈现的视图控制器中添加了以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
override func viewDidLoad()
{ 
    super.viewDidLoad()

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
    view.addGestureRecognizer(tapGesture)
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@objc func handleTap(sender: UITapGestureRecognizer)
{
    let touchpoint = sender.location(in: view)
    let popviewrect = popview.frame

    if (!popviewrect.contains(touchpoint))
    {
        dismiss(animated: true, completion: nil)
        delegate?.onDismissed()
    }      
}

呈现控制器实现onDismissed委托:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func onDismissed()
{
    loginViewController = nil
}

仍然想知道是否有更优雅的方法来做到这一点

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51579412

复制
相关文章
iOS获取当前显示UIViewController视图
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplication sharedApplication] keyWindow]; if (window.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplicatio
Lee坚武
2020/12/01
9620
SAP BMBC报表不能显示批次分类视图里的特性值
BMBC报表可以显示批次相关的字段值,但是自定义在批次分类视图了那些特性值,不能在这个标准报表里显示的。如下图示:
SAP虾客
2021/03/25
1.1K0
iOS小技巧·把子视图控制器的视图添加到父视图控制器
把子视图控制器的视图添加到父视图控制器并覆盖 添加子控制器 #pragma mark - 添加子控制器 - (void)addSubControllers{ [self addChildViewController:_childViewController]; [self.view addSubview:_childViewController.view]; [_childViewController.view mas_makeConstraints:^(MASConstraintMaker
陈满iOS
2018/09/10
9750
基于FPGA的VGA/LCD显示控制器系统设计(上)
今天给大侠带来基于FPGA的VGA/LCD显示控制器设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,VGA 显示原理以及VGA/LCD 显示控制器的基本框架,话不多说,上货。
FPGA技术江湖
2021/05/21
1.5K0
基于FPGA的VGA/LCD显示控制器系统设计(上)
SpringMVC的视图控制器(二)
现在我们已经配置了 SimpleUrlHandlerMapping 和 InternalResourceViewResolver,可以使用它们来创建视图控制器了。要创建视图控制器,需要创建一个带有 @Controller 注解的类,并在这个类中添加用于处理 URL 的方法。这些方法将使用 InternalResourceViewResolver 来将视图名称解析为实际的视图,并将这些视图呈现给用户。下面是一个创建视图控制器的示例:
堕落飞鸟
2023/05/13
3530
iOS屏幕旋转及其基本适配方法
前段时间抽空总结了一下iOS视频播放的基本用法,发现这其中还有一个我们无法绕过的问题,那就是播放界面的旋转与适配。的确,视频播放与游戏类型的App经常会遇到这个的问题。由于至今接手的项目中不常涉及这块知识疏于总结,在搜索了一些资料后也发现都很散乱,所以决定在这里重新整理一下。
梧雨北辰
2018/04/24
9.5K1
iOS屏幕旋转及其基本适配方法
SpringMVC的视图控制器(一)
SpringMVC 的视图控制器是一个可以将 URL 映射到视图的控制器。它允许开发人员通过简单的配置来处理不需要任何逻辑的请求,并将它们直接映射到相应的视图。使用视图控制器,可以将控制器代码与视图代码分开,使代码更加清晰易读。
堕落飞鸟
2023/05/13
4500
SpringMVC的视图控制器(三)
接下来,我们需要创建一个名为 spring-config.xml 的 SpringMVC 配置文件,该文件将 InternalResourceViewResolver 添加到应用程序中,并将 HomeController 和 AboutController 添加到 DispatcherServlet 中。spring-config.xml 文件的内容如下:
堕落飞鸟
2023/05/13
3280
【DB笔试面试431】在视图上不能完成的操作是()
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,它不同于基本表,它是一个虚拟表,其内容由查询定义。在数据库中,存放的只是视图的定义而已,而不存放数据,这些数据仍然存放在原来的基本表结构中。只有在使用视图的时候,才会执行视图的定义,从基本表中查询数据。可以更新视图,也可以在视图上定义新的视图,但是不能在视图上定义新的表。所以,本题的答案为C。
AiDBA宝典
2019/09/30
8.2K0
ViewPager获取当前显示的View[通俗易懂]
思路:根据vp.getCurrentItem一级vp的child数,可算出当前child在vp中的index。但是此时还不能直接用vp.getChildAt获取,因为getChildAt对应的index不一定 为vp中child实际的排列顺序(左右拖动时,打log即可验证)。此时可根据各child的x值重新排序,再用vp.getChildAt即可。
全栈程序员站长
2022/09/15
1.6K0
ViewPager 获取当前显示的Fragment
Viewpager 获取当前显示的fragment 使用 getSupportFragmentManager().findFragmentByTag()方法 Viewpager + FragmentPagerAdapter 情况下 才好使; FragmentPagerAdapter 有一个特点 凡是加载过的Fragment 都会被保留,既然Fragment不会被销毁,那我们就可以使用findFragmentByTag() 方法找到它;但问题是动态创建的话 tag的设置;我们知道动态加载时是可以设置tag的,
佛系编码
2018/05/22
3.7K0
显示网卡当前速度的脚本
显示网卡当前速度的脚本,速度是指网卡的连接速度,就是鼠标放到网卡图标上显示的速度
力哥聊运维与云计算
2019/06/28
9810
看看上下文映射的清晰视图
在我之前的文章中,我详细讨论了有界上下文以及如何处理域的复杂性。最好将域划分为几个子域,并将它们映射到不同的有界上下文,其中每个业务实体/值对象在该上下文中都具有一定的含义,因此业务的每个利益相关者(产品所有者,开发人员,架构师和赞助商)都理解上下文和具有适当分类标准的实体。当我们在商业利益相关者之间以统一的语言讨论域对象时,就不会对命名造成混淆。
Techeek
2018/07/09
1.5K0
看看上下文映射的清晰视图
Kibana上创建"index-pattern"为何不能匹配正确的索引?
最近,经常有用户反馈,明明我的集群上有创建了相关的索引,为何在Kibana上,创建Index Pattern的时候,无法点击“下一步”,如下图所示:
南非骆驼说大数据
2020/12/01
3.7K1
SpringMVC 文件下载时 浏览器不能正确显示另存的文件名
问题:通过打印输出流的方式把文件下载到本地,但是在firebox 中 下载的文件不显示文件的文件名,造成文件不能直接打开,其他浏览器可以直接打开. 原因: 主要是文件名称中有汉字而没有转码造成firebox浏览器不能正确显示另存的文件名 解决方案: //提供如下工具类将 文件名编码 就可以啦 public static String toUtf8String(HttpServletRequest request, String s) {          String agent = request.ge
冷冷
2018/02/08
1.2K0
[ISUX转译]iOS 9人机界面指南(一)上篇:UI设计基础 - 腾讯ISUX
文章索引 1.1 为iOS而设计(Designing for iOS) 1.1.1 设计跟随内容 (Defer to Content) 1.1.2 保证清晰 (Provide Clarity) 1.1.3 用深度层次来进行交流 (Use Depth to Communicate) 1.2 iOS应用解析 (iOS App Anatomy) 1.3 适应性和布局(Adaptivity and Layout 1.3.1 为自适应而开发(Build In Adaptivity) 1.3.2 在不同环境提供良好体验
腾讯ISUX
2018/06/29
1.9K0
IOS开发之视图和视图控制器
        视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多。在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类。UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示。窗口是用来显示视图的,下面我们将会结合着实例来具
lizelu
2018/01/11
1.8K0
IOS开发之视图和视图控制器
控制器到视图的传值方式
(3)TempData        TempData实际上保存在Session中,控制器每次执行请求时都会从Session中获取TempData数据并删除该Session。TempData数据只能在控制器中传递一次,其中的每个元素也只能被访问一次,访问之后会被自动删除。
wfaceboss
2019/04/08
1.3K0
iOS翻页视图控制器UIPageViewController的应用
    UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView与UIPageControl结合的滚屏视图,也可以创建类似图书效果的炫酷翻页视图。UIPageViewController类似一个视图容器,其中每个具体的视图由各自的ViewController进行维护管理,UIPageViewController只进行协调与动画布置。下图可以很好的展现出UIPageViewControlelr的使用结构:
珲少
2018/08/15
2.3K0
iOS翻页视图控制器UIPageViewController的应用
虚拟机usb控制器_显示器上的USB接口
我们常用的显示器接口有HDMI、VGA等接口,这些接口是直接在显卡上的,当显示器插在显卡上,显卡就直接可以将显示信号输出到显示器了。
全栈程序员站长
2022/09/24
1.6K0
虚拟机usb控制器_显示器上的USB接口

相似问题

无法使用当前上下文显示的模态视图控制器展开Segue

14

模式视图控制器不能正确旋转

12

UITabBarController在当前上下文中显示模态视图控制器后的黑色屏幕

910

显示当前上下文故事板上的视图控制器

10

目标C-在当前模态视图之后,根控制器是不正确的。

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文