检测互联网连接并显示 UIAlertview Swift 3

2024-04-25

我正在制作一个应用程序,通过使用 if else 语句来检测是否有互联网连接,当有互联网时,不执行任何操作,但如果没有互联网连接,则警报视图说该应用程序需要我管理的互联网,但发现可达性在我的 viewDidLoad() 上实现 uialertview 似乎不起作用。 我正在使用这个:

public class Reachability {
class func isConnectedToNetwork() -> Bool {
    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
        }
    }
    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
        return false
    }
    let isReachable = flags == .reachable
    let needsConnection = flags == .connectionRequired
    return isReachable && !needsConnection
    }
}

然后在我的视图控制器类中:

override func viewDidLoad() {
        if Reachability.isConnectedToNetwork() == true
        {
            print("Connected")
        }
        else
        {
            let controller = UIAlertController(title: "No Internet Detected", message: "This app requires an Internet connection", preferredStyle: .alert)
            let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
            let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

            controller.addAction(ok)
            controller.addAction(cancel)

            present(controller, animated: true, completion: nil)
        }
        super.viewDidLoad()
        //...
    }

看起来警报视图没有弹出 有什么建议吗?或帮助? 谢谢


您必须将 AlertController 放入 ViewControllers 生命周期的 viewDidAppear 方法中,因为在方法 viewDidLoad 和 viewWillAppear 中,您当前的视图仍然不在窗口层次结构中。
如果你想展示更多的 ViewController,比如 AlertController,你需要一个完整加载的视图,在其中可以渲染你的新 ViewController:

override func viewDidLoad() {
    super.viewDidLoad()
    //ViewControllers view not in the window hierarchy
    // Here you could make further initialization of your views subviews
}

override func viewWillAppear(_ animated: Bool) {
    //ViewControllers view ist still not in the window hierarchy
    //This is the right place to do for instance animations on your views subviews
}

override func viewDidAppear(_ animated: Bool) {
    // ViewControllers view ist fully loaded and could present further ViewController
    //Here you could do any other UI operations
    if Reachability.isConnectedToNetwork() == true
    {
        print("Connected")
    }
    else
    {
        let controller = UIAlertController(title: "No Internet Detected", message: "This app requires an Internet connection", preferredStyle: .alert)
        let ok = UIAlertAction(title: "OK", style: .default, handler: nil)
        let cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

        controller.addAction(ok)
        controller.addAction(cancel)

        present(controller, animated: true, completion: nil)
    }

}

Apple 文档中关于 ViewController 的说法是这样的: UIViewController 方法的调用如下:

  • viewDidLoad()——当视图控制器的内容视图(顶部 它的视图层次结构)是从故事板创建并加载的。这 方法用于初始设置。然而,由于意见可能 由于应用程序中的资源有限而被清除,无法保证 它只会被调用一次。
  • viewWillAppear()——适用于任何 您希望始终在视图变为之前发生的操作 可见的。因为视图的可见性可能会被切换或遮挡 其他视图中,此方法总是在紧接之前调用 内容视图出现在屏幕上。
  • viewDidAppear()——适用于任何 您希望在视图变为时立即发生的操作 可见,例如获取数据或显示动画。因为一个 视图的可见性可能会被其他视图切换或遮挡,这 方法总是在内容视图出现后立即调用 在屏幕上。

参考:https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html

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

检测互联网连接并显示 UIAlertview Swift 3 的相关文章

  • IOS 8 CLLocationManager 问题(授权不起作用)

    import MyLocationViewController h define NSLog FORMAT printf s n NSString stringWithFormat FORMAT VA ARGS UTF8String int
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • 子视图的子层与更高的子视图重叠

    我有一个问题 我正在创建一个UIView这是从方法返回的 这部分很好 但我注意到 当我将子层添加到其中一个子视图时 这些层与子层添加的层次结构中较高的子视图 textView 和 imageView 重叠到testViewCopy出现在这些
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • iOS 视频压缩 Swift iOS 8 损坏的视频文件

    我正在尝试压缩用户相机从 UIImagePickerController 拍摄的视频 不是现有视频 而是动态视频 以上传到我的服务器 并花费少量时间来完成此操作 因此较小的尺寸是理想的选择 而不是 30 较新质量的相机为 45 mb 这是在
  • iOS AVCaptureVideoDataOutput 消耗太多内存

    我在用AVFoundation使用iPhone相机捕获视频的框架 我的代码 self session AVCaptureSession alloc init self output AVCaptureVideoDataOutput allo
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 通过应用程序组在应用程序之间通信和保存数据

    iOS 8 昨天发布了一个有关应用程序组的新 API 以前在应用程序之间共享数据和通信有点混乱 我相信这正是应用程序组旨在纠正的问题 在我的应用程序中 我启用了应用程序组并添加了一个新组 但我找不到任何有关如何使用它的文档 文档和 API
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • 如何检测 iOS 8 上的包含应用程序是否启用了应用程序扩展?

    我正在 iOS 8 beta 上开发一个自定义键盘 我想告诉用户如果我的自定义键盘未启用 如何在包含应用程序中启用它 有什么方法可以检测应用程序扩展是否已启用 首先让我们设置一些常量 以便于彼此理解 包含应用程序 安装扩展并保存扩展二进制文
  • ExpandableLabel iOS 中的“少看”

    我正在使用第三方库可扩展标签 https github com apploft ExpandableLabel实施一个see more特征 我正在寻找仅快速的解决方案 其中包含标签中的文本而不是按钮中的文本 因此这可以完美地工作 添加库并更
  • 如何避免 NSNumberFormatter 中的四舍五入

    我试图拥有一个最大精度为 2 位小数的数字字符串 而其余小数只是被修剪掉而不是四舍五入 例如 I have 123456 9964 I want 123456 99 gt Just want to trim rest of the deci
  • iOS JPEG 图像旋转 90 度

    我正在使用选择器视图从相册中选择图像 我使用上面的代码 void imagePickerController UIImagePickerController picker didFinishPickingMediaWithInfo NSDi
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • Xamarin.Forms DataTemplateSelector 不适用于 iOS(未调用构造函数)

    我正在膨胀数据模板选择器 如下所示
  • iOS 键盘显示后分屏宽度

    我刚刚开始研究 Cordova 应用程序对分屏多任务处理的支持 到目前为止 该应用程序在模拟器中的 iPad 上显示和调整大小都很好 但是当我单击编辑字段并显示软件键盘时 100 宽度的值开始返回整个屏幕 而不是给出的窗口 初始显示 到目前
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 是否可以在增强现实应用程序中使用自定义 iOS UI 元素(例如 UILabel)

    我想知道是否可以使用像这样的 UI 元素UIButton UILabel在带有 ARKit 的增强现实应用程序中 如果您也对 UIView 子类的透明度模式感兴趣 请尝试我的示例https github com erikhric ar me

随机推荐

  • 组装:如何从 json/yaml 生成页面?

    如果提供布局 有没有办法从 json yaml 生成页面 我认为这是可能的 但在文档中找不到 目前正在 GitHub 中对此进行跟踪 http webb li QjTX http webb li QjTX 自从options pages功能
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 调整大小程序 检测到一个或多个无效文件名

    我无法消除 Visual Studio for Mac 2022 v17 中 net maui 应用程序中的此生成错误 构建输出显示 usr local share dotnet packs Microsoft Maui Resizetiz
  • 将 txt 文件转换为字典

    我有一个文本文件 我需要将所有偶数行放入字典键 将所有偶数行放入字典值 我的问题的最佳解决方案是什么 int count lines 1 Dictionary
  • Laravel 从模型插入数百万数据库行

    我有一个文本文件 其中包含逗号分隔的值 表示字符串中每一行的数据集 它们大约有 200 万个 我想解析字符串 根据它们创建 Laravel 模型 并将每个模型作为一行存储在我的数据库中 此时 我有一个类逐行解析文件并为每个文件创建一个模型
  • 如何判断全屏应用程序是否正在运行?

    python 是否可以判断 linux 上的全屏应用程序是否正在运行 我感觉使用 Xlib 可能是可行的 但我还没有找到方法 EDIT 我所说的全屏是指整个屏幕 除了应用程序之外 没有其他任何内容 例如全屏游戏 如果您有兴趣在支持下运行所有
  • 从简单的 POST 请求到 node.js 的响应中出现“意外的输入结束”消息

    我编写了一个简单的 node js 程序来演示我在其他地方遇到的问题 给出以下 Node js 程序 var http require http http createServer function req res simple repro
  • 如何在 xml android 中绘制半边框

    我想画一个这样的边框带边框的编辑文本 https i stack imgur com ubwqF png 我的代码如下
  • 哈希链接重新加载页面

    我有一个安装在第三方网站上的代码片段 我无法了解详细信息 但它通过使用 a 将 HTML CSS 和 JS 加载到页面上
  • 如何添加私有 github 存储库作为 Composer 依赖项

    我在 Laravel 5 1 项目的composer json 中有以下内容 用于添加公共 github 存储库作为依赖项 repositories type package package name myVendorName my pri
  • PowerShell 中的 echo 和 Write-Host 有什么区别?

    我对之间的区别感到困惑echo and Write Host在 PowerShell 中 我有两个文件 POC ps1 validatePath ps1 这些文件位于我的本地计算机上 我使用以下命令在远程计算机上运行它们Invoke Com
  • Java中交替显示2个字符串

    我有一个java程序 其中我想要实现以下目标 first input ABC second input xyz output AxByCz 我的Java程序如下 import java io class DisplayStringAlter
  • 如何使用 VueJS 将 API 中的数据存储在 localStorage 中

    我使用 VueJS 练习简单的 SPA 要求我监听 API 并将其一些数据保存在浏览器的 localStorage 中 但是我对 VueJS 仍然不是很有经验 所以我不知道如何获取特定数据并保存将其发送给 LS 以便登录用户稍后可以看到他们
  • 如何以编程方式获取亚马逊卖家中心订单?

    我们一直手动将亚马逊订单输入我们的系统 并希望将其自动化 但是 我似乎不知道该怎么做 他们的文档几乎不存在 有 亚马逊库存管理 AIM API 用于管理订单和库存 事件通知服务 ENS API 获取订单通知 卖家中心 SOAP API 上传
  • `na_if()` 中的错误:!无法将 `y` 转换为匹配 `x` 的类型

    我有一个数据帧 df 3 我想从中改变以以下开头的多个列Team 我想用 NA 替换列中包含的 0 我使用以前成功使用过的代码 但现在出现以下错误 Error in mutate In argument across starts with
  • 具有可选小数点的十进制数的正则表达式

    我的要求是测试粘贴的数据 如果失败则不要粘贴 Regex d 0 4 d 0 2 使用的数据 1 2 tests true 1 2 3 test true as well 要求是 小数点前最小 0 最大 4 位小数点可以是点或逗号如果有小数
  • 判断一个数是否是质数

    我已经仔细阅读了有关该主题的大量代码 但大多数代码生成的数字一直到输入数字都是素数 但是 我需要的代码仅检查给定的输入数字是否为素数 这是我能够写的 但它不起作用 void primenumber int number if number
  • 如何从 Uri 中修剪视频,包括“mp4parser”库可以处理的文件,但使用 Android 框架?

    背景 在过去的几天里 我一直致力于制作一个可定制的 更新版本的视频剪辑库 here https github com AndroidDeveloperLB VideoTrimmer 基于这个图书馆 https github com tita
  • 无法解析程序集 Model.dll

    我有一个使用实体框架的类库项目 它工作得很好 直到我将模型移到一个单独的类库类型项目中 将模型移至名为 Model 的单独类库项目后 我将 app web config 中的连接字符串更改为如下所示
  • 检测互联网连接并显示 UIAlertview Swift 3

    我正在制作一个应用程序 通过使用 if else 语句来检测是否有互联网连接 当有互联网时 不执行任何操作 但如果没有互联网连接 则警报视图说该应用程序需要我管理的互联网 但发现可达性在我的 viewDidLoad 上实现 uialertv