Programmatically set image to UIImageView with Xcode 6.1/Swift
IosXcodeSwiftIos Problem Overview
I'm trying to set UIImageView programmatically in Xcode 6.1:
@IBOutlet weak var bgImage: UIImageView!
var image : UIImage = UIImage(named:"afternoon")!
bgImage = UIImageView(image: image)
bgImage.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(bgImage)
But Xcode is saying "expected declaration" with bgImage = UIImageView(image: image)
Image "afternoon"
is a PNG, and my understanding is PNG does not need an extension in XCode 6.1.
Also tried just bgImage.image = UIImage(named: "afternoon")
, but still get:
UPDATE
OK, I have put the code to update UIImageView
into the viewDidLoad
function, but UIImageView
is still not showing the image (which exists in the base directory as afternoon.png):
@IBOutlet weak var bgImage: UIImageView!
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
updateTime()
var timer = NSTimer()
let aSelector : Selector = "updateTime"
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
var image : UIImage = UIImage(named:"afternoon")!
bgImage = UIImageView(image: image)
}
Ios Solutions
Solution 1 - Ios
Since you have your bgImage assigned and linked as an IBOutlet, there is no need to initialize it as a UIImageView... instead all you need to do is set the image property like bgImage.image = UIImage(named: "afternoon")
. After running this code, the image appeared fine since it was already assigned using the outlet.
However, if it wasn't an outlet and you didn't have it already connected to a UIImageView object on a storyboard/xib file, then you could so something like the following...
class ViewController: UIViewController {
var bgImage: UIImageView?
override func viewDidLoad() {
super.viewDidLoad()
var image: UIImage = UIImage(named: "afternoon")!
bgImage = UIImageView(image: image)
bgImage!.frame = CGRectMake(0,0,100,200)
self.view.addSubview(bgImage!)
}
}
Solution 2 - Ios
In xcode 8 you can directly choose image from the selection window (NEW)...
-
You just need to type - "image" and you will get a suggestion box then select -"Image Literal" from list (see in attached picture) and
-
then tap on the square you will be able to see all images(see in
second attached picture) which are in your image assets... or select other image from there.
- Now tap on square box - (You will see that square box after selecting above option)
Solution 3 - Ios
OK, got it working with this (creating the UIImageView programmatically):
var imageViewObject :UIImageView
imageViewObject = UIImageView(frame:CGRectMake(0, 0, 600, 600))
imageViewObject.image = UIImage(named:"afternoon")
self.view.addSubview(imageViewObject)
self.view.sendSubviewToBack(imageViewObject)
Solution 4 - Ios
How about this;
myImageView.image=UIImage(named: "image_1")
where image_1 is within the assets folder as image_1.png.
This worked for me since i'm using a switch case to display an image slide.
Solution 5 - Ios
This code is in the wrong place:
var image : UIImage = UIImage(named:"afternoon")!
bgImage = UIImageView(image: image)
bgImage.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.addSubview(bgImage)
You must place it inside a function. I recommend moving it inside the viewDidLoad
function.
In general, the only code you can add within the class that's not inside of a function are variable declarations like:
@IBOutlet weak var bgImage: UIImageView!
Solution 6 - Ios
With swift syntax this worked for me :
let leftImageView = UIImageView()
leftImageView.image = UIImage(named: "email")
let leftView = UIView()
leftView.addSubview(leftImageView)
leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 20)
userNameTextField.leftViewMode = .always
userNameTextField.leftView = leftView
Solution 7 - Ios
In Swift 4, if the image is returned as nil.
Click on image, on the right hand side (Utilities) -> Check Target Membership
Solution 8 - Ios
If you want to do it the way you showed in your question, this is a way to do it inline
class YourClass: UIViewController{
@IBOutlet weak var tableView: UITableView!
//other IBOutlets
//THIS is how you declare a UIImageView inline
let placeholderImage : UIImageView = {
let placeholderImage = UIImageView(image: UIImage(named: "nophoto"))
placeholderImage.contentMode = .scaleAspectFill
return placeholderImage
}()
var someVariable: String!
var someOtherVariable: Int!
func someMethod(){
//method code
}
//and so on
}
Solution 9 - Ios
You just need to drag and drop an ImageView
, create the outlet action, link it, and provide an image (Xcode is going to look in your assets
folder for the name you provided (here: "toronto"))
In yourProject/ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imgView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imgView.image = UIImage(named: "toronto")
}
}