概述
iOS开发中按钮多次响应问题解决方案
本文主要介绍在iOS开发中, 关于按钮多次快速点击, 响应多次的问题, 其实大多数时候我们希望按钮的响应事件只执行一次, 尽管我们快速点击按钮, 但是还是希望只响应一次, 那么在这种情况下, 就需要我们人为控制, 本文给出一种合理的解决方案, 希望对大家有帮助。
其实,遇到关于按钮的事件, 我主要介绍以下两种情况:
1. 存在网络请求的按钮事件(网络延迟)
2. 页面路由相关的跳转事件(界面跳转,push, present等)
存在网络请求的按钮事件
首先, 介绍关于存在网络请求的按钮事件, 这种事件应该在开发中是经常遇到的,
例如:登录按钮事件,如果我们快速多次点击按钮, 会不会多次触发登录请求?第一次登录请求结果未返回之前,再次点击登录按钮, 要不要触发下次登录请求?
这种情况下,解决方案其实很简单:那就是在按钮点击之后, 将按钮设置为不可用, 等到网络请求的结果返回后, 重新设置按钮为可用状态。
这里的实现方案很简单, 其实有个小细节就是:我们是使用enabled属性还是userInteractionEnabled属性来设置可用状态, 对于button而言, 如果使用enabled属性, 会发现button的样式发生了变化, 而userInteractionEnabled属性则不会产生任何变化, 建议uiview子类使用userInteractionEnabled来设置可用状态, 而像buttonItem这种就可以使用enabled来设置。
页面路由相关的跳转事件
至于这种情况, 其实不想button点击事件那样容易发现, 例如我们点击按钮push下个界面, 如果我们快速点击多次, 会发现push出来多个相同的界面, 显然这个不是我们想要的结果, 这种问题的解决思路其实也和上面一样, 只是处理方法不太一样,因为这里涉及到界面的跳转, 相对比较麻烦。
先说一下, 我在项目中的处理思路, 因为我们界面跳转方式大致就是push,pop,present,dismiss等, 因此我们在UIViewController的分类统一定义了这几种跳转方式, 大致是以下几个方法, 其实跟之前不太一样的就是多了一个sender的参数, 这个其实就是触发事件的载体,在方法体中我们需要控制sender的可用状态。
这里还有一点需要提到的是,当我们使用present方式展现的时候, 有时候需要在外面包装一个navigationController, 这里也一并处理了。
#pragma mark - 页面跳转
- (void)presentPage:(UIViewController *)viewController embededInNav:(BOOL)embeded sender:(id)sender animated:(BOOL)animated completion:(void (^)(void))completion;
- (void)pushPage:(UIViewController *)viewController sender:(id)sender animated:(BOOL)animated;
- (void)closePageWithSender:(id)sender animated:(BOOL)animated;
- (void)dismissPageWithSender:(id)sender animated:(BOOL)animated completion:(void (^)(void))completion;
- (void)popPageWithSender:(id)sender animated:(BOOL)animated;
关于具体的内部实现, 大家可以自行处理, 这里只是提供解决思路。
总结
到这里两种情况就介绍完了, 这也是我在项目中使用到的解决方法, 希望对大家有帮助, 有什么不足的地方, 也欢迎纠正补充。
最后
以上就是轻松飞机为你收集整理的iOS开发中按钮多次响应问题解决方案iOS开发中按钮多次响应问题解决方案的全部内容,希望文章能够帮你解决iOS开发中按钮多次响应问题解决方案iOS开发中按钮多次响应问题解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复