3

Im getting an error with this code.. What it should do: When user taps button, the image changes to checked, taps again, changes to Unchecked.

Im getting the error: AnyObject doesnt have member names 'setImage ...

 @IBAction func tick(sender: AnyObject) {
    if let image = UIImage(named:"Unchecked") {
        sender.setImage(UIImage(named:"Checked.png"), forControlState: .Normal)
    }
    if let image = UIImage(named:"Checked") {
        sender.setImage( UIImage(named:"Unchecked.png"), forControlState: .Normal)
    }
}
The Tom
  • 2,790
  • 6
  • 29
  • 33
James Dithon
  • 41
  • 2
  • 6

3 Answers3

4

You only needs to change (sender:AnyObject) to (sender:UIButton) as below

@IBAction func tick(sender: UIButton) {
    if let image = UIImage(named:"Unchecked") {
        sender.setImage(UIImage(named:"Checked.png"), forControlState: .Normal)
    }
    if let image = UIImage(named:"Checked") {
        sender.setImage( UIImage(named:"Unchecked.png"), forControlState: .Normal)
    }
}
Arslan Asim
  • 1,232
  • 1
  • 11
  • 29
1

You have to explicitly tell your compiler that sender is a UIButton and not AnyObject type.

    @IBAction func tick(sender: AnyObject) {
     if let button = sender as! UIbutton {
        if let image = UIImage(named:"Unchecked") {
            button.setImage(UIImage(named:"Checked.png"), forControlState: .Normal)
        }
        if let image = UIImage(named:"Checked") {
            button.setImage( UIImage(named:"Unchecked.png"), forControlState: .Normal)
        }
      } 
    }
Loegic
  • 3,390
  • 20
  • 33
1

You can do it this way:

var checked = false

@IBAction func tick(sender: UIButton) {

    if checked {
        sender.setImage( UIImage(named:"Unchecked.png"), forState: .Normal)
        checked = false
    } else {
        sender.setImage(UIImage(named:"Checked.png"), forState: .Normal)
        checked = true
    }
}
Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165