如何在 Swift 中显示一条弹出消息,该消息在 3 秒后消失或可以立即被用户取消?

2023-12-25

在我的 swift 应用程序中,我有一个带有单个按钮的 UIViewController。

此按钮调用一个函数,该函数调用一个弹出窗口,该弹出窗口在 3 秒后消失。此外,在那之后它会向控制台打印一条消息。该函数的代码如下:

func showAlertMsg(title: String, message: String){


    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    self.presentViewController(alertController, animated: true, completion: nil)
    let delay = 3.0 * Double(NSEC_PER_SEC)
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
        alertController.dismissViewControllerAnimated(true, completion: nil)
    print("popup disappeared")
    })

}

效果很好,但我想引入一些改进。我想添加一个按钮,该按钮将立即取消此弹出窗口,然后避免在控制台中显示该消息。有没有办法向用户显示这样的弹出窗口?另外 - 有没有一种方法可以在此弹出消息中显示计数器,其中秒数已用完,以显示弹出窗口消失之前还剩多少时间?


您可以使用NSTimer要减少计数器,请更新警报视图并在计数器达到 0 时关闭警报视图。此代码改编自我的Objective-C 答案 https://stackoverflow.com/questions/36048240/countdown-nstimer-in-title-of-a-uialertcontroller-getting-a-null-instead-of-time/36048730#36048730

class ViewController: UIViewController {

    var alertController: UIAlertController?
    var alertTimer: NSTimer?
    var remainingTime = 0
    var baseMessage: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)         
        self.showAlertMsg("Test Alert", message: "This will disappear in ", time: 5)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func showAlertMsg(title: String, message: String, time: Int) {

        guard (self.alertController == nil) else {
            print("Alert already displayed")
            return
        }

        self.baseMessage = message
        self.remainingTime = time

        self.alertController = UIAlertController(title: title, message: self.alertMessage(), preferredStyle: .Alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
            print("Alert was cancelled")
            self.alertController=nil;
            self.alertTimer?.invalidate()
            self.alertTimer=nil
        }

        self.alertController!.addAction(cancelAction)

        self.alertTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(ViewController.countDown), userInfo: nil, repeats: true)       

        self.presentViewController(self.alertController!, animated: true, completion: nil)     
    }

    func countDown() {

        self.remainingTime -= 1
        if (self.remainingTime < 0) {
            self.alertTimer?.invalidate()
            self.alertTimer = nil
            self.alertController!.dismissViewControllerAnimated(true, completion: {
                self.alertController = nil
            })
        } else {
            self.alertController!.message = self.alertMessage()
        }

    }

    func alertMessage() -> String {
        var message=""
        if let baseMessage=self.baseMessage {
            message=baseMessage+" "
        }
        return(message+"\(self.remainingTime)")
    }     
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中显示一条弹出消息,该消息在 3 秒后消失或可以立即被用户取消? 的相关文章

  • 在 iOS 中将一个或多个格式化程序与页面渲染器一起使用

    有没有人尝试过使用多个格式化程序 UIViewPrintFormatter UIMarkupTextPrintFormatter UISimpleTextPrintFormatter 与页面渲染器 UIPrintPageRenderer 打
  • 在 iOS Swift 中将 NSDate 转换为字符串 [重复]

    这个问题在这里已经有答案了 我正在尝试转换NSDate to a String然后更改格式 但当我经过NSDate to String它正在产生空白 let formatter DateFormatter let myString Stri
  • 如何根据 UITableViewCell 中的内容调整 UICollectionView 的水平高度

    我正在尝试放置一个UICollectionView in a UITableViewCell 我想在中显示评论UICollectionViewCells 与分页 注释中可能不止一行 所以我想调整大小UICollectionView如果注释标
  • “目标文件格式无法识别、无效或不合适”Xcode 错误

    我看不出有任何理由说明为什么这条消息应该出现在日志的末尾 Users Val Library Developer Xcode DerivedData Mathematics dzakmzlewrmgvibasvuixiwmkwwp Buil
  • 如何在 viewDidLayoutSubviews 中获得正确的视图高度?

    void viewDidLayoutSubviews super viewDidLayoutSubviews NSLog viewDidLayoutSubviews view height f self view frame size he
  • 没有这样的模块“SDWebImage”

    我安装了SDWebImage using CocoaPods 我的 podfile 是这样写的https github com rs SDWebImage https github com rs SDWebImage platform io
  • 具有编程调整大小的自动布局 UIImageView 不遵循约束

    抱歉打扰 但我正在尝试延迟加载多个 imageView 然后根据 UITableView 中的内容按比例调整其大小 我也在尝试 也许不明智 基本上是第一次使用自动布局 我不明白为什么这些限制在这种情况下不起作用 这是我在将正确的图像加载到
  • 更改 Tapku 日历上标记日期的所选图像

    你好 我浏览过网络和许多博客 但似乎没有关于如何更改tapku日历控件标记日期的图像的信息 我对代码做了一些研究 但无法完成目标 现在写 我能够更改日期图块的背景图像 但是当我这样做时 日期的文本消失了 有什么想法吗 我已经更改了上面的图像
  • dispatch_async UIWebView 加载请求

    我正在加载我的应用程序中的 JavaScript 该脚本将尝试找到解决方案 这可能需要一些时间 我不想等待该解决方案超过 5 秒 在这种情况下 我只想停止请求并向用户显示一条消息 我一直在尝试使用 NSTimers 和dispatch as
  • 检查 Swift 中的类是否存在

    我想在我的 Swift iOS 应用程序中使用 NSURLQueryItem 但是 该类仅从 iOS 8 起可用 但我的应用程序也应该在 iOS 7 上运行 我如何检查 Swift 中的类是否存在 在 Objective C 中你会做类似的
  • WKWebView 用户代理(swift)

    我正在尝试使用 swift 从 WKWebView 获取用户代理 let webView WKWebView frame zero useragentlabel text webView configuration applicationN
  • UITableView 与 UILabel SizeToFit 滚动时会变得混乱

    大家好 我有问题tableview 我用uilabel with SizeToFit然后计算UILabel设置单元格高度的高度一切正常 除了当我滚动我的tableView文本变得很奇怪 就像每行一个字符 My TableViewVell方法
  • 了解设备类型——视网膜/非视网膜[重复]

    这个问题在这里已经有答案了 可能的重复 检测视网膜显示屏 https stackoverflow com questions 3504173 detect retina display 我们如何从 Objective C 代码中知道设备是否
  • OS X Server - 机器人无法从存储库获取源代码

    我安装了以前版本的 OS X Server 并且运行良好 但是当我安装升级到 3 2 1 时 我发现我的机器人都无法正常工作 这些是我在每次尝试集成时遇到的问题 构建服务错误无法将数据放入缓冲区 1 构建服务警告由于找不到工作副本 源代码管
  • 获取对容器视图的视图控制器的引用[重复]

    这个问题在这里已经有答案了 我有一个 viewController 其中包含一个 ContainerView 正在设置 ViewController 我正在设置一个segue 并在prepareforsegue方法中我想获取对嵌入在容器视图
  • iOS 音频修剪

    我搜索了很多 找不到任何相关的东西 我正在处理 iOS 音频文件 这就是我想做的 录制音频并保存剪辑 已检查 我使用AVAudioRecorder 改变音高 已检查 是用狄拉克做的吗 修剪 我有两个标记 即开始和结束偏移 并使用此信息我想修
  • 是否可以禁用用户按下通知横幅时打开应用程序的机制?

    使用iOS13 4 XCode11 4 Swift5 2 在我当前的应用程序中 我成功地创建了本地通知 发生通知时会显示横幅 横幅的显示与应用程序状态无关 即打开的应用程序在前台或后台运行 或者即使应用程序完全关闭 到目前为止 一切都很好
  • 如何在 iOS 中屏蔽 UIView

    我见过类似的问题 但没有找到可行的答案 我想使用灰色图像屏蔽 UIView 需要转换为 alpha 比例进行屏蔽 UIView 有背景 屏蔽图像应该很容易 但我想屏蔽任何 UIView 任何线索将不胜感激 我已经研究这个问题几个小时了 并找
  • iOS 中如何将阴影变成圆形?

    我创建了一个圆形 UIView 它也应该有一个阴影 到目前为止 一切正常 但在角落 阴影没有正确倒圆 如何将阴影角变圆 这是代码和屏幕截图 popupView layer cornerRadius 15 popupView layer sh
  • 方法未到达完成块

    我正在使用SKStoreProductViewController使用以下方法显示 iTunes 产品 该方法被调用 但我没有成功或错误 知道为什么吗 IBAction func BuySomething sender AnyObject

随机推荐