2017-08-24 3 views
0

別のviewControllerのUIImageViewをタップすると、UIImageView wCircleを赤に変更しようとしています。問題は、私がrDotをタップすると、Thread 1: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP subcode = 0x0)wCircleをグローバル変数にしたので、他のviewControllerに到達する可能性があります。異なるviewControllerのtapGestureで画像の色を変更します

まずViewControllerを

weak var wCircle: UIImageView! 

class SecondViewController: UIViewController { 
    @IBOutlet weak var wCircle: UIImageView! 
} 

第二のViewController

class ProgressViewController: UIViewController { 
    @IBOutlet weak var rDot: UIImageView!     
    override func viewDidLoad() { 
     super.viewDidLoad()    
     rDot.isUserInteractionEnabled = true    
     let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(rdotimageTapped(tapGestureRecognizer:)))    
     rDot.addGestureRecognizer(tapGestureRecognizer)   
    }  

    func rdotimageTapped(tapGestureRecognizer: UITapGestureRecognizer) { 
     wCircle.image = wCircle.image!.withRenderingMode(.alwaysTemplate) //error on this line 
     wCircle.tintColor = UIColor.red  
    } 
} 
+0

私はあなたのコードの値下げを編集するために最善を尽くしました - それはあまり意味がありませんでした。 (必要な箇所を修正してください。ありがとう!)編集後、いくつかのコードが見つからないように見えます。最初のコントローラはどのようにして2番目のインスタンスを生成しますか? 'rdotimageTapped'は実際に動作していますか? (ブレークポイントを設定してそれに確実に答えますか?)他にも可能性がありますが、それらは私に飛び乗る最初の2つです。 – dfd

+0

@dfdその編集に感謝します。私はそれが質問に必要なすべてのコードだと信じています。 'rdotimageTapped'が動作しています。私は、あなたが2番目のインスタンスを生成するviewControllerによって何を意味するかについてはあまりよく分かりません。 – Tabj

+0

@Tabjはクラス外のグローバル変数を宣言するのは良い考えではありません。そのため、 'rDot'をタップしても何も起こらないので、グローバル変数を自分のクラス –

答えて

0

あなたのコードは、コード

のこのラインはweak var wCircle: UIImageView!

を交換する任意の方法

の変化を組織し、何も示していないされていません

weak var wCircle = UIImageView() 

この

func rdotimageTapped(tapGestureRecognizer: UITapGestureRecognizer) { 
    wCircle?.image = whiteDot.image!.withRenderingMode(.alwaysTemplate) //error on this line 
    wCircle?.tintColor = UIColor.red 
} 
+0

にカプセル化してください。 tapGestureは機能しません。 – Tabj

+0

それは動作しますが、どこにWCircleイメージがありますか?それはIBoutletに接続されていますか? –

+0

私は最初のviewControllerでIBoutletに接続しました。 – Tabj

0

wCircleは弱い変数であり、あなたはそれがオプションすることはできません、他のクラスからそれを呼び出しているとき、それはオプションvalue.Soです。また、それを強い変数にしてください

関連する問題