我试图让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
}
}
我尽我所能编辑你的代码降价 - 这没什么意义。 (在需要的地方更正,谢谢!)编辑之后,它看起来像是一些代码丢失 - 可能不需要,很难说。第一个控制器如何实例化第二个? 'rdotimageTapped'实际上工作吗? (你是否设置了一个断点来明确地回答这个问题?)可能还有其他的可能性,但这些是前两个跳出来的。 – dfd
@dfd感谢您的编辑。我相信这是问题所需的所有代码。 'rdotimageTapped'正在工作。我不太确定viewController实例化第二个参数的意思。 – Tabj
@Tabj在类之外声明全局变量并不是一个好主意。因此,当我点击'rDot'时什么都没有发生,用这个代码将你的全局变量封装到他们自己的类 –