I'm trying to update a UIimageview
image with a method inside a class with a viewDidLoad()
call. I'm trying to change the image by:
MyIMage.image = UIImage(named: "image2")
but its giving me the error of:
Instance member cannot be used on type "view controller"
Where am I going wrong?
My Code:
import UIKit
class ViewController: UIViewController {
@IBOutlet var MyImage: UIImageView!
var MyStruct = ChangeImage()
struct ChangeImage {
private var _isChanged: Bool = false
mutating func Set_Change(val: Bool) {
if (val) {
MyImage.image = UIImage(named: "image2")
self._isChanged = true
} else {
MyImage.image = UIImage(named: "image1")
self.isChanged = false
}
}
func isChanged()-> Bool {
return self._isChanged
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
MyStruct.Set_Change(val: true)
print (MyStruct.isChanged())
}
}
I think your problem is that the structure can't use the variable from the ViewController
class, so I changed it to a function that does the same thing:
import UIKit
class ViewController: UIViewController {
@IBOutlet var myImage: UIImageView!
func Set_Change(val: Bool) -> Bool {
if (val) {
myImage.image = UIImage(named: "image2")
return true
} else {
myImage.image = UIImage(named: "image1")
return false
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let didChange = Set_Change(val: true)
print(didChange)
}
}
Here is the extract of the code corrected but with the same error in line : let _myImage = MyImage()
class ViewController: UIViewController {
@IBOutlet var MyImage: UIImageView!
var MyStruct = ChangeImage()
struct ChangeImage {
private var _isChanged: Bool = false
let _myImage = MyImage() // ----> Error : Instance member ‘MyImage’ cannot be used on type ‘ViewController’
mutating func Set_Change(val: Bool) {
if (val) {
_myImage.image = UIImage(named: "image2")
self._isChanged = true
} else {
_myImage.image = UIImage(named: "image1")
self._isChanged = false
}
}
func isChanged()-> Bool {
return self._isChanged
}
}
Here's the solution that works :
import UIKitclass ViewController: UIViewController {
@IBOutlet var MyImage: UIImageView! // Insert Outlet Image : "MyImage" // Structure ChangeImage struct ChangeImage { private var _isChanged: Bool = false private var _myImage: UIImageView! // Private variable _myImage init (ImgView: UIImageView) { // Initiate ImgView called since func viewDidLoad() self._myImage = ImgView // Private variable _myImage = ImgView ( variable MyImage in func viewDidLoad() ) } mutating func Set_Change(val: Bool) { if (val) { _myImage.image = UIImage(named: "image2") self._isChanged = true } else { _myImage.image = UIImage(named: "image1") self._isChanged = false } } func isChanged()-> Bool { return self._isChanged } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var MyStruct = ChangeImage(ImgView: MyImage) // Initiate Structure ChangeImage with variable MyImage. MyStruct.Set_Change(val: true) print (MyStruct.isChanged()) }
}
;)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.