I am receiving a "nil" error when trying to set the image for a button programmatically. What am I doing wrong? These are all not optionals.
@IBOutlet weak var scrollView: UIScrollView!
var imageButton: UIButton!
var index: Int = 0
var images: [UIImage] = [UIImage(named: "image1.png")!, UIImage(named: "image2.png")!, UIImage(named: "image3.png")!, UIImage(named: "image4.png")!, UIImage(named: "image5.png")!, UIImage(named: "image6.png")!, UIImage(named: "image7.png")!, UIImage(named: "image8.png")!, UIImage(named: "image9.png")!, UIImage(named: "image10.png")!, UIImage(named: "image11.png")!, UIImage(named: "image12.png")!, UIImage(named: "image13.png")!, UIImage(named: "image14.png")!, UIImage(named: "image15.png")!, UIImage(named: "image16.png")!, UIImage(named: "image17.png")!, UIImage(named: "image18.png")!, UIImage(named: "image19.png")!, UIImage(named: "image20.png")!, UIImage(named: "image21.png")!, UIImage(named: "image22.png")!, UIImage(named: "image23.png")!, UIImage(named: "image24.png")!, UIImage(named: "image25.png")!, UIImage(named: "image26.png")!, UIImage(named: "image27.png")!, UIImage(named: "image28.png")!, UIImage(named: "image29.png")!, UIImage(named: "image30.png")!]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
//let screenHeight = screenSize.height
let numWidth: CGFloat = 3
let numHeight: CGFloat = 10
self.scrollView.frame.size.width = screenWidth
let width: CGFloat = (self.scrollView.frame.size.width - (numWidth + 1))/3
for var i:CGFloat = 0; i < 3; ++i{
for var j:CGFloat = 0; j < 10; ++j {
let image: UIImage = images[index] as UIImage!
imageButton.setImage(image,forState:UIControlState.Normal)
imageButton.frame = CGRectMake(width*i, width*j, width, width)
self.scrollView.addSubview(imageButton)
index++
}
}
scrollView.contentSize.height = (width)*numHeight
I think you are creating Image from Image again.
Just do it like
imageButton.setImage(images[index],forState:UIControlState.Normal)
Hope it will work.
Or you can do it like :
var images = [String]?
in viewDidLoad
images = ["image1.png","image2.png"]
let img : UIImage = UIImage(named: images[index])!
imageButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)//Set your own frame
imageButton.setImage(img,forState:UIControlState.Normal)
And check for the image it must be available in your project
The image needs to be in Assets.xcassets as an image set...works v.smooth!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With