UINavigationBar:拦截后退按钮和后退滑动手势

2024-02-15

我有一个 UINavigationBar 可以拦截后退按钮点击,如果有未保存的更改,则会提醒用户。这是基于中提出的解决方案UINavigationController 和 UINavigationBarDelegate.ShouldPopItem() 与 MonoTouch https://stackoverflow.com/questions/6413595/uinavigationcontroller-and-uinavigationbardelegate-shouldpopitem-with-monotouc使用 UINavigationBarDelegate 协议并实现- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;

现在,iOS7引入了滑动返回手势,我也想拦截它,但无法让它与我迄今为止找到的解决方案一起使用,即使用[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)]; and

- (void)handlePopGesture:(UIGestureRecognizer *)gesture {
    if (gesture.state == UIGestureRecognizerStateEnded) {
        [self popViewControllerAnimated:NO];
    }
}

虽然这确实会弹出视图,但它会将导航栏按钮留在原处,因此我最终会得到一个无处可去的后退按钮,以及我添加到导航栏的所有其他导航按钮。有小费吗?


要拦截向后滑动手势,您可以设置self作为手势的代表(<UIGestureRecognizerDelegate>),然后返回 YES 或 NOgestureRecognizerShouldBegin基于未保存的更改:

// in viewDidLoad
self.navigationController.interactivePopGestureRecognizer.delegate = self;

// ...
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {

        if (self.dirty) {
            // ... alert
            return NO;
        } else
            return YES;
    } else 
        return YES;
}

在警报中,您可以询问用户是否想返回,在这种情况下,将控制器弹出alertView clickedButtonAtIndex:

希望这个对你有帮助。

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

UINavigationBar:拦截后退按钮和后退滑动手势 的相关文章

  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 适用于 IOS 和 Android 的支付网关 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个应用程序 用户必须在澳大利亚餐馆通过应用程序 android ios 付款 有两种付款方式 通过 PayPal 或 Visa
  • Parse.com 和 Facebook 登录,运行无限循环

    我将 Parse 和 Facebook iOS SDK 都更新到了最新版本 当我尝试使用 Facebook 登录时 我的应用程序崩溃了 从调试器中我可以看到它正在无限循环中调用 3 4 个方法 我的登录代码如下所示 void openSes
  • 在带有 Storyboard 的 XCode 4 中以模态方式推送视图时,出现“对开始/结束外观转换的不平衡调用”警告

    在网上进行了一些研究但没有成功后 我来这里向您询问有关我的警告的问题 实际上 我有一个带有导航控制器的视图 V1 我想在 V1 完成加载时推送模态视图 V2 所以我用performSegueWithIdentifier方法 我正在使用故事板
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • 在 UISearchController 文本字段中输入内容时导航栏消失

    我试图找出为什么当我开始在 UISearchController searchBar 中输入时我的整个导航栏消失 它正确加载并正确动画 但是当我开始输入时我丢失了活动的导航栏 下面是从 viewDidLoad 加载 searchContro
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们

随机推荐

  • UIActivityViewController 解雇 MailViewController

    我尝试通过 UIActivityViewController 发送电子邮件 它工作正常 但发送电子邮件后邮件视图不会被关闭 当用户按下 取消 按钮时 它也不会关闭 我可以做什么来解决这个问题 这是我使用过的代码 conf share vie
  • Java - 多个GSON?

    好的 我正在创建一个使用的应用程序JSON保存日期 我用了GSON as my JSON 处理器 是的 我知道如何使用Gson 我按照网络上的教程进行操作 问题是 Web 上的教程只保存 一个 json 数据 我的意思是 例如 Data1
  • 手动确认消息:Spring Cloud Stream Kafka

    我想要实现的场景是使用来自 Kafka 的消息 处理它 如果某些条件失败我不希望确认该消息 为此 我在 Spring Cloud Stream 参考文档中找到了 自动提交偏移量 处理消息后是否自动提交偏移量 如果设置为 false 则消息标
  • Android:如何动态使视图具有相同的高度

    我正在 Android 应用程序中制作一张表 现在我无法使视图具有相同的高度 有2个TextViews tmp name and tmp content在每一行中 的高度tmp content取决于的长度course description
  • GitHub Actions 工作流程语法未按预期工作

    我有一个 GitHub 工作流程 当文件按照 图案 abc 被修改 创建 据我了解 这意味着每当 位于以下开头的文件夹的某个子文件夹中的文件abc or 任何以以下内容开头的文件abc 修改后 应触发 GH 操作 然而 当我例如创建一个文件
  • 我可以使用 FluentMigrator 创建 nvarchar(MAX) 列吗?

    Using 流利迁移器 http code google com p fluentmigrator 默认创建一个Column using AsString 结果是nvarchar 255 有没有一种简单的方法 在我修改 FluentMigr
  • 如何将标量树枝过滤器映射到数组

    我有一个简单的浮点数数组 我需要将其显示为逗号分隔的字符串 arr join 是一个糟糕的解决方案 因为精度太低 for val in arr val number format 2 endfor 不好 因为末尾有多余的逗号 我想做这样的事
  • Python-生成特定自相关的数组

    我有兴趣生成一个长度为 N 的数组 或 numpy 系列 它将在滞后 1 处表现出特定的自相关性 理想情况下 我还想指定均值和方差 并从 多 正态分布中提取数据 但最重要的是 我想指定自相关 如何使用 numpy 或 scikit lear
  • 为什么我会收到“构造函数未定义”错误?

    为什么下面的代码会产生编译错误 构造函数AA 未定义 它不应该调用默认构造函数吗 public class A public A public class AA extends A public AA int aa public class
  • IPC::Run - 检测早产儿退出和关闭管道

    我想使用 IPC Run 通过孩子的 STDIN STDOUT 和 STDERR 开始 泵送 完成 与孩子进行通信 似乎有效 我想知道如何检测 儿童过早退出 例如由错误引起 水管被孩子关闭 The pump抛出一个die出现错误时 或将其消
  • 如何在 Python 中从 URL 读取图像数据?

    当我们处理本地文件时 我想做的事情相当简单 但当我尝试使用远程 URL 来执行此操作时 问题就出现了 基本上 我正在尝试从从 URL 提取的文件创建 PIL 图像对象 当然 我总是可以只获取 URL 并将其存储在临时文件中 然后将其打开到图
  • 如何从生产中删除 console.log?

    如何从生产中删除所有 console log 此代码无法运行laravel mix 4 x webpack mix js mix js resources js app js public js if mix inProduction mi
  • android 无法启动模拟器:无法运行程序

    我已经在Ubuntu上成功安装了android SDK和android eclipse插件 一切都工作正常 直到我删除 Ubuntu 并安装 Linux Mint 我再次安装了 SDK 并使用了我在 Ubuntu 上使用的相同 Eclips
  • “未提供任何值的属性”错误 - UrlFetchApp

    我有以下错误 未提供任何值的属性 错误来自行 var content UrlFetchApp fetch url getContentText 这是我的代码 function getArray var newData new Array v
  • 在golang中一起执行bash echo和nc [重复]

    这个问题在这里已经有答案了 这可能是一个简单的问题 在 Linux 机器上工作 我正在尝试从go程序 我有一个服务器正在监听请求 但这行代码给我带来了问题 cmd exec Command echo n hello nc localhost
  • Linux:在 docker 容器中找不到现有共享库

    我尝试在 docker 容器内设置 FastRTPS 我编写了一个 Dockerfile 它从源代码构建 FastRTPS 及其依赖项 并安装库并提供示例 但这些例子不起作用 opt usr local examples C HelloWo
  • 如何设置android wifi热点的高级设置

    我通过以下代码打开便携式 wifi 热点 private void createWifiAccessPoint WifiManager wifiManager WifiManager getBaseContext getSystemServ
  • KQL 正则表达式行提取

    我有一个名为 AdditionalExtensions 的专栏 其中包含以下内容 start Aug 13 2022 20 42 17 logver700060366 ad 我想添加正则表达式搜索以仅提取并显示日期和时间 如下所示 2022
  • Jar 文件名形成 java 代码

    我想从我的 java 代码中确定 jar 文件名 我在谷歌中找到了很多解决方案 但没有任何效果 只是为了看看我在这里尝试了什么 这是一个 stackoverflow 论坛 其中发布了一堆解决方案 堆栈溢出 https stackoverfl
  • UINavigationBar:拦截后退按钮和后退滑动手势

    我有一个 UINavigationBar 可以拦截后退按钮点击 如果有未保存的更改 则会提醒用户 这是基于中提出的解决方案UINavigationController 和 UINavigationBarDelegate ShouldPopI