swift - 如何防止按钮在每次点击时反复运行?

标签 swift segue

我不知道为什么,但我假设按钮不应该可以一次又一次地点击来重做自己......

我有一个相当简单的代码。 当我的按钮被点击时,它使用 urlSession 将图像下载到另一个 viewController 的背景 View 中并继续进入其中。

我的问题是,如果在等待图像加载时单击按钮 3 次,我的 viewController 将向下 3 层进入导航 Controller ,并且要返回到原始 viewController,我必须单击后退按钮 3 次。我不是应该不能往下连续3层吗!?

@IBAction func showImage(_: UIButton) {

    loadImage()
}
func loadImage () {
    let url = URL(string: "https://upload.wikimedia.org/wikipedia/en/thumb/a/a4/Flag_of_the_United_States.svg/1280px-Flag_of_the_United_States.svg.png")
    var request = NSMutableURLRequest(url: url!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
    request.httpMethod = "GET"
    let session = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
        guard let data = data else {
            print("You got an error:\(error)")
            return
        }
        let img = UIImage(data: data )
        let imgview = UIImageView(image: img)
        let sb = UIStoryboard(name: "Main", bundle: nil)
        let ivc = sb.instantiateViewController(withIdentifier: "showImage")
        ivc.view = imgview
        self.navigationController?.pushViewController(ivc, animated: true)
    }
    session.resume()
}

最佳答案

感谢 Phillip Mills 的评论,这就是我所做的:

我添加了

@IBOutlet weak var showImage: UIButton!

然后点击后,我禁用了该按钮:

showImage.isEnabled = false

完成转场后,我再次启用它:

showImage.isEnabled = true

我的完整代码是:

@IBOutlet weak var showImage: UIButton!  // Added
    @IBAction func showImage(_: UIButton) {
        showImage.isEnabled = false // Added
        loadImage()
    }
    func loadImage () {
        let url = URL(string: "https://upload.wikimedia.org/wikipedia/en/thumb/a/a4/Flag_of_the_United_States.svg/1280px-Flag_of_the_United_States.svg.png")
        var request = NSMutableURLRequest(url: url!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
        request.httpMethod = "GET"
        let session = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
            guard let data = data else {
                print("You got an error:\(error)")
                return
            }
            let img = UIImage(data: data )
            let imgview = UIImageView(image: img)
            let sb = UIStoryboard(name: "Main", bundle: nil)
            let ivc = sb.instantiateViewController(withIdentifier: "showImage")
            ivc.view = imgview
            self.navigationController?.pushViewController(ivc, animated: true)
            self.showImage.isEnabled = true // Added


        }
        session.resume()
    }

关于swift - 如何防止按钮在每次点击时反复运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40312341/

相关文章:

ios - 使用 json 数据填充 tableView

ios - 多 View 转一 View ,我怎么回发件人

iOS:在分段的 TableView 中获取行位置

ios - UIPickerView.selectRow 滚动导致崩溃

swift - 我从两个 viewController 转到一个 viewController。如何向调用者解除 segue?

ios - 处理此类问题的更好方法是什么?

ios - iOS10使用Xcode8时AutoLayout无法正确显示

ios - WKNavigationDelegate 应用程序在分配时崩溃

swift - 使用 Touch ID 密码保护 Swift 应用程序

ios - UIStoryboardSegue sourceViewController 在 destinationViewController 之上