首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在以模态方式呈现的ViewController上不触发UIButton操作

是由于视图层级的问题造成的。

在iOS开发中,当使用模态方式呈现一个ViewController时,默认情况下会将该ViewController的视图添加到当前视图层级的最上方。这意味着如果模态ViewController的视图覆盖了当前视图上的UIButton,用户点击UIButton时实际上是点击了模态ViewController的视图,而不是UIButton。

要解决这个问题,可以尝试以下几种方法:

  1. 调整视图层级:在模态ViewController的视图中,将UIButton的父视图的层级调整到模态ViewController视图层级的最上方,确保UIButton位于模态ViewController的视图之上。可以使用以下方法实现:
  2. 调整视图层级:在模态ViewController的视图中,将UIButton的父视图的层级调整到模态ViewController视图层级的最上方,确保UIButton位于模态ViewController的视图之上。可以使用以下方法实现:
  3. 上述代码将button所在的父视图调整到模态ViewController的视图层级的最上方。
  4. 使用代理或闭包:在模态ViewController中,通过代理或闭包的方式将UIButton的点击事件传递给当前视图控制器进行处理。具体步骤如下:
  5. a. 在模态ViewController中定义一个代理协议,包含一个方法用于传递按钮点击事件。
  6. a. 在模态ViewController中定义一个代理协议,包含一个方法用于传递按钮点击事件。
  7. b. 在模态ViewController中声明一个代理属性,并在按钮的点击事件中调用代理方法。
  8. b. 在模态ViewController中声明一个代理属性,并在按钮的点击事件中调用代理方法。
  9. c. 在当前视图控制器中,实现ModalViewControllerDelegate协议,并处理按钮点击事件。
  10. c. 在当前视图控制器中,实现ModalViewControllerDelegate协议,并处理按钮点击事件。
  11. 通过这种方式,按钮的点击事件将传递给当前视图控制器进行处理,而不会受到模态ViewController的影响。
  12. 重新设计界面交互:如果以上方法不适用或不符合设计需求,可以重新考虑界面交互,避免模态ViewController的视图覆盖到需要点击的按钮上,或者使用其他方式代替模态方式呈现视图。

总结起来,要解决在以模态方式呈现的ViewController上不触发UIButton操作的问题,可以通过调整视图层级、使用代理或闭包传递按钮点击事件,或重新设计界面交互来解决。以上方法都可以帮助您实现预期的按钮操作效果。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

成为一名优秀 Swift 开发人员的 10 个小技巧

在使用 Objective-C 时,我总是不情愿地使用继承。当然这并不总是错误的,正确的使用子类也不会出错。但是 Swift 扩展可以轻松地将简单方法集成到通用类上,而无需做任何复杂的事情。...但作为开发人员,需要记住两点: 首先,不要让导航过于复杂,除非有简单的方法可以返回主页可撤消操作,否则不要在模态上再展示模态,也不要在 UINavigationController 上 push 多个组件...事件操作中 sender 参数非常有用 最后一个技巧是使用 sender 参数。每个响应事件的方法或选择器都可以知道是谁触发了事件。...只需要将所有 UIButton 连接到相同的 @IBAction,然后使用发送方找出触发了该事件中的哪一个,并为该特定行为编写正确的实现即可。...此外,在 UI 元素上使用 tag 来标识它们,而不是使用其标题或其它内容来区分。 结论 我没有提到所有基本的 OOP 原则。显然,您必须以正确的方式实现类,封装,抽象和设计模式。

2.3K40

【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

, 拖到制定的控件处, 这样 ViewController.h 中的属性与 Main.storyboard 中的控件建立起了关联; ① 属性左侧的圆圈图示 : 第一张是鼠标没有移动到圆圈上, 第二章是鼠标移动到了圆圈上...属性并关联界面 : 同上面的操作, 在创建第二个属性, 关联 ViewController.h 中的属性与 Main.storyboard 中的属性; 4.创建 Label 属性 并关联界面 :....退出软键盘方式 : 两种方式 ① 哪个 TextField 触发的, 通过对应的 TextField 控件 关闭键盘; ② 通过 父控件 关闭 软键盘; ① 谁触发谁关闭 : 调用控件的 resignFirstResponder...All rights reserved. // #import "ViewController.h" @interface ViewController () //定义要操作的主要按钮, 即显示头像的按钮...: 按住 control 键, 按住鼠标左键拖线 从 UIButton 控件 到 ViewController.m 中, 在弹出的对话框中设置对应参数, 方法名, 控件类型, 参数 等; 生成的代码

5K30
  • iOS 事件传递和处理

    不同事件在响应链中处理方式不同,这里我们主要分析touch事件的传递和处理。 用户点击手机屏幕的过程 App外:用户点击->硬件响应->参数量化->数据转发->App接收。...2、如果给UIButton添加Tap手势,点击UIButton的时候是触发UIButton的Tap手势,还是触发UIButton的点击回调?...UIButton是UIControl的子类,通过追踪touch事件的变化得到一些UIControl定义的事件(UIControlEvents);UIButton的点击操作是通过UIControlEvents...2、如果给UIButton添加Tap手势,点击UIButton的时候是触发UIButton的Tap手势,还是触发UIButton的点击回调?...上文分析了手势的识别是发生在响应链回调之前,也就是tap手势是发生在touches系列方法回调之前,那么Tap手势应该是在UIButton的touches方法之前。

    1.5K20

    【IOS开发基础系列】UIViewController专题

    当程序接收到内存警告时,controller会尝试卸载view,在卸载循环中,controller尝试释放它的view对象并返回到原始的无view状态(当它不在屏幕上显示时,这个条件的判断到底是根据view...(iOS3.0以后不建议重载这个函数来进行额外的清除操作,使用viewDidUnload).         b) 默认实现会在确定可以安全地释放view时释放掉view。         ...所以我们用标准的方式来呈现和解散这个VC: //MainViewController.m - (void)viewDidLoad {     [super viewDidLoad];     // Do...而在这个操作过程中,我们甚至可以撤销我们的手势,以取消这次VC转移。...在刚才demo的基础上,这次我们用一个向上划动的手势来吧之前呈现的ModalViewController给dismiss掉~当然是交互式的切换,可以半途取消的那种。

    73030

    【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )

    在 Name 栏 设置 方法名称 ; b . 在 Event 栏 设置 方法触发动作 ; c . Touch Up Inside 即 点击方法 ; d ....; 有两种使用方式 , 一种是 直接创建指定所有参数 ; 第二种 可以在之前的基础上进行增量修改 ; ---- ( 8 ) 效果展示 效果展示 : ---- 三....代码区域 , 在弹出的对话框中 输入方法名称 , 选择控件类型 , 选择触发操作 , 选择传入的参数 即可生成点击方法 ; // 上一张 图片 - (IBAction)lastImage:(UIButton...: 动画执行 操作 会覆盖 上一次的 动画 , 每次 调用 startAnimating 都会 重新开始 执行动画 , 因此 当动画正在 执行时 , 不要覆盖 ; 使用 isAnimating 方法...: 1.首先判断 动画 是否在执行 : 动画执行 操作 会覆盖 上一次的 动画 , 每次 调用 startAnimating 都会 重新开始 执行动画 , 因此 当动画正在 执行时 , 不要覆盖 ;

    4K40

    IOS开发之TabBarItem&NavigationBarItem

    在IOS开发中常用的多视图间的切换大致有TabBarController, NavigationBarController, 和模态窗口。第一次接触模态的概念是在Web前端的内容中接触的。...1.登陆页面的的跳转实现     在登陆ViewController中要跳转到TabBarController中需要根据用户输入的信息来实现跳转。...换个说法,就是登陆页面在storyboard中和其他页面是没有关系的,需要我们用业务逻辑来实现,下面是用模态的形式来进行视图切换的。...关联完以后我们就可以在相应的试图控制器类中实现我们的业务逻辑啦,操作如下: ?     3....我们可以通过storyboard通过拖拽的方式来配置我们的NavigationBar 也可以通过手写代码的方式进行配置:     (1)用storyboard来为我们的Navigation Bar添加按钮

    1.4K80

    1.注册或登录页面设计:UILabel,UIButton,UITextField

    最初学iOS的时候苦于没有大神指点,全靠自己一点点摸索,确实走了很多弯路,不希望还有小伙伴跟我一样走过多的弯路。   ...作为iOS开发的入门总结的第一篇,这里以最常见的注册或登陆页面设计作为开篇,这里主要会用到UILabel,UIButton,UITextField这三个控件。...一.注册或登录界面 如下图,实现了一个注册或登录界面,这里先只介绍单个页面,不介绍点击“完成”按钮后的动作,在之后的系列《iOS开发入门总结》中会逐步介绍,等基础知识介绍的差不多了,就可以以一个完整的注册系统作为小结...这类操作也非常普遍和重要。...触发了这个事件以后,执行butClick:这个方法,addTarget:self 的意思是说,这个方法在本类中 也可以传入其他类的指针*/ [button1

    2.4K50

    实际操作-手把手探究tableViewCell上的控件点击事件进阶篇:实际项目操作

    测试Cell上控件的点击事件 参与测试的cell上的两个控件:一个UIButton,一个UIImageView。...---- -->探究1:点击Button的时候,因为Button在cell上,是否会同时触发Button的点击事件以及 cell的行点击事件? ?...的点按手势,不触发cell的行点击事件!...cell的push操作 如同,因为tableViewCell不是ViewController,没有navigationVC属性,并不能实现控制器的push操作!...,发送请求,点击整个操作结束后,异步的请求都不一定执行完,由于异步执行,数据经常是当时获取没完成就接下去执行了,导致数据为空;               3.在2的基础上,执行完didSelectRowAtIndexPath

    3.7K50

    iOS开发系列——Storyboard

    : a.png 在这个界面中整个核心就是右侧视图控制器ViewController,在ViewController中有一个视图UIView,这个视图用来放置其他用户操作控件。...那么如何在代码中读取两个TextField的值并通过点击按钮触发相关事件验证登录合法性呢?...IBAction:其实就是void,只是当你定义为IBAction在Interface Builder中可以关联到某个控件的事件方法(后面的关联操作将会看到,而且我们在代码中也可以看到代码前面多了空心圆点...在控件上右键找到对应的属性或方法关联到代码中对应的属性或方法即可,关联后属性或方法前的空心圆变成实心表示已经关联到具体控件。...g.gif 如果要删除关联,可以采用第三、第四种方式在控件上右键,在关联菜单中找到对应的关联删除即可。

    3.4K40

    View Controller编程指南

    容器ViewController收集来自其他ViewController(称为子ViewController)的信息并以便于导航的方式呈现或以不同方式呈现这些ViewController的内容。...调节 ViewController负责呈现View,并使该呈现适应底层环境。每个iOS应用程序都应该能够在iPad上运行,并且可以在几种不同大小的iPhone上运行。...UIKit期望您以规定的方式使用ViewController。 维护正确的ViewController关系可确保自动行为在需要时传递给正确的ViewController。...容器型ViewController通常作为root ViewController安装在窗口中(如图所示),但它们也可以以模态方式呈现,或者作为其他容器的子项安装。容器负责适当地定位其子视图。...当涉及容器ViewController时,UIKit可能会修改链来简化您必须编写的代码。不同的演示风格对于它们在屏幕上的显示方式有不同的规则 - 例如,全屏显示总是覆盖整个屏幕。

    1.3K20

    Swift:静态工厂方法

    iOS上的UIKit和Mac上的AppKit都为我们提供了创建具有原生外观的UI所需的所有基本核心构建块,但是我们经常需要自定义这些外观以适合我们的设计并为其定义布局。...我们要做的是在 UILabel 上添加一个扩展,使我们能够从上面创建与 TitleLabel完全相同设置的新实例,如下所示: extension UILabel { static func makeForTitle...尤其是在使用子视图控制器时,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好的解决方案。...特别是如果与"Swift:将子视图控制器用作插件" 中的便捷API的稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置的加载视图控制器: class ProductListViewController...尤其是在测试依赖于特定模型配置的代码时,很容易以充满样板的测试结束,这使它们更难以阅读和调试。

    2.4K10

    iOS 中block结构的简单用法 原

    也有两种方式: 1、-(void)func:(int (^)(int a,int b))block; 第二种方式是通过typedef定义一种新的类型,这也是大多数情况下采用的方式: 2、typedef...,会访问到block自己拷贝的那一份变量,它是在block创建的时候创建的,而访问加了这个关键字的变量,则会访问这个变量的地址所对应的变量。...3、一点点扩展 由此,我们可以理解,如果block中操作的对象是指针,那么直接可以进行修改,这包括OC对象,如果不是,则需要用__block关键字修饰。...注意:根据这个机制,如果我们将block用来传值,在block不用时,务必要置为nil,而在实现block的方法里,务必要释放;我们通过代码来解释: 首先,创建三个ViewController,为ViewController1...,ViewController2,ViewController3; 1、在ViewController1中创建一个按钮,跳转ViewController2 2、在ViewController2中: #import

    58930

    Cocoa编程中视图控制器与视图类详解

    UIView是iPhone屏幕上很多控件的基础类。每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的。...UIActionSheet  所有控件(控件是将用户触摸转换为回调触发器的屏幕对象。)...;   提示:UIViewController 有一个属性是navigationController,如果当前ViewController在某个NavigationController的堆栈中 的话(即是被推送过来的...选项卡类的方便之处就是不需要象导航栏那样以栈的方式推入和弹出视图的操作,而是组建一系列的控制器(它们各自可以是UIViewController、UINavigationController、UITableViewController...,以让UITabBarController能够正常触发这些回调方法。

    5.1K50

    Container ViewController自定义转场控制器。

    前言 最近接触到新公司的老项目改版。自从来了之后一直在忙另一个项目,也没有看老项目的实现逻辑。 看到设计稿的时候,并不是普通的树形标签导航的样子。大致效果如FaceU的主页: ?...经同事指导,最后找到Container View Controllers Quickstart,才发现一种新的转场实现方式。下面就动手实践一下。...打开viewController.m创建两个UIButton: @interface ViewController () @property (nonatomic, strong) UIButton *...在`viewcontroller.m中引入,并添加如下属性方法: // 记录当前是哪个vc @property (nonatomic, strong) UIViewController *currentVC...相对应的右侧弹出的实现方式一样,只是把Frame更改下,就可以实现从右侧弹出的效果。具体代码就不贴了。 如果想回到主页,只用写个移除self.currentVC的方法,调用下就可以了。

    71610

    36.Swift学习之Associated Object

    介绍 Swift 可以利用 OC 的 runtime 和 KVC ,在运行时向一个对象添加值存储,这种方式称之为Associated Object。...在使用 extension 扩展现有类的功能时,使用Associated Object的方式,可以将一个值 “关联” 到已有的要扩展的类上。该知识点在 iOS 开发中使用往往能优雅地解决很多问题。...,并且通过 & 操作符取地址并作为 UnsafeRawPointer 类型被传入,这在 Swift 与 C 协作和指针操作时是一种很常见的用法。...,此时可以有如下几种方案: 创建 9 个按钮,逐一设置 通过 for 创建 9 个 UIButton,为 UIButton设置不同的tag,然后在点击事件里面用 switch case判断 自定义UIButton...,添加自定义属性 利用 Associated Object 绑定参数 class ViewController: UIViewController { // 不同的参数 let

    2.2K20

    Runtime再理解

    基于以上两点可知,类方法在元类的methodList中是以实例方法的姿态存在的!! 3,Runtime的应用 很多人觉得Runtime很高大上、很难学、很难理解、华而不实。...——消息转发流程 (3)提高OC对象序列化与反序列化的效率:Runtime应用——序列化&反序列化 (4)Hook方法进行代码调试:Runtime应用——在不修改原方法的基础上给原方法添加功能 (5)防止在...但是在一些特殊的场景下,为了规避苹果的审查,我们需要服务器数据来控制页面的跳转,即需要动态实现控制器的获取或者创建,此时该怎么处理呢?...并不是说在ViewController中的self就是ViewController或者其实例, *该消息给谁发送,也就是说,该消息的接收者是谁,那么self就是谁 */ [self...并不是说在ViewController中的self就是ViewController或者其实例, *该消息给谁发送,也就是说,该消息的接收者是谁,那么self就是谁 */ [self

    65120
    领券