How to set image for button in Swift / Xcode

I get an "nil" error when I try to programmatically set the image for a button. What am I doing wrong? All this is not optional.

@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 
+7
ios xcode swift xcode7-beta3
source share
2 answers

I think you are creating Image from Image again.

Just do it like

 imageButton.setImage(images[index],forState:UIControlState.Normal) 

Hope this works.

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 that the image should be available in your project

+15
source share

The image should be in Assets.xcassets as a set of images ... v.smooth works!

+1
source share

All Articles