2016-10-28 7 views
0

私は理由を知りませんが、ボタンをクリックして繰り返し実行することはできないという前提の下にありました。クリックごとにボタンが何度も実行されないようにするにはどうすればよいですか?

私はかなり簡単なコードを持っています。 私のボタンがクリックされると、urlSessionを使って別のviewControllerのbackgroundviewに画像をダウンロードし、それを継ぐ。

私の問題は、画像を読み込むのを待っている間にボタンを3回クリックすると、viewControllerは3レイヤーをnavigationControllerに分割し、元の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() 
} 
+2

あなたがイメージのロードを開始する前にボタンを無効にしますか? –

+1

@PhillipMillsだから私のコードは間違った方法で構造化されていないのですか?それ以外は追加する必要がありますか?私はセグメンテーションした後、もう一度ボタンを有効にしますか? – Honey

+0

@ハニーあなたの質問のタイトルを読んでもらえますか? – Alexander

答えて

0

フィリップ・ミルズのコメントのおかげで、これは私がやっていることです:

を私は

@IBOutlet weak var showImage: UIButton! 

を加え、次にクリックすると、私はボタンを無効:

showImage.isEnabled = false 

segueを実行した後、再び有効にしました:

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() 
    } 
関連する問題