2017-08-24 46 views
0

我试图让UIImageView wCircle变成红色,当点击不同的viewController rDot上的UIImageView。问题是,当我点击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

我尽我所能编辑你的代码降价 - 这没什么意义。 (在需要的地方更正,谢谢!)编辑之后,它看起来像是一些代码丢失 - 可能不需要,很难说。第一个控制器如何实例化第二个? 'rdotimageTapped'实际上工作吗? (你是否设置了一个断点来明确地回答这个问题?)可能还有其他的可能性,但这些是前两个跳出来的。 – dfd

+0

@dfd感谢您的编辑。我相信这是问题所需的所有代码。 'rdotimageTapped'正在工作。我不太确定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当你从其他类调用它,它不能是可选的。也让它变强