2016-06-14 1 views
0

Est-ce que quelqu'un sait comment changer la couleur de fond d'un UIButton personnalisé?Changer la couleur de fond de la coutume UIButton (CoreGraphics) lorsque le bouton est pressé

enter image description here

Comme vous pouvez le voir dans l'image que le bouton nommé parcelle a une couleur d'arrière-plan orange. Mais le bouton à gauche (le triangle noir) n'est pas en orange. Ce que je veux, c'est quand j'appuie sur le bouton "plot" ou "award", le triangle qui se trouve à côté change aussi avec.

Voici mon code:

@IBDesignable class LeadingButton: UIButton { 

override func drawRect(rect: CGRect) { 

    // *Draw triangle button: 

    // Create context for triangle 
    let context = UIGraphicsGetCurrentContext() 

    // *Put information into context: 

    // Info for drawing triangle: 
    CGContextMoveToPoint(context, 17, 0) 
    CGContextAddLineToPoint(context, 0, 40) 
    CGContextAddLineToPoint(context, 17, 40) 
    CGContextAddLineToPoint(context, 17, 0) 

    // Info color triangle 
    CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor) 

    // Color in triangle with specified color 
    CGContextFillPath(context) 

    // Draw triangle 
    CGContextStrokePath(context) 
} 
} 

class MovieDetailController: UIViewController { 

override func viewDidLoad() { 
     super.viewDidLoad() 
    // For changing background color of buttons 
     self.buttonArray = [plotB, directorB, writerB, actorsB, countryB, awardB, posterB, leadingB, trailingB] 

    } 

    func isButton(pressed: Int) { 

     switch pressed { 
     case 0...8: 

      let selectedButton = buttonArray[pressed] 
      selectedButton.backgroundColor = UIColor.orangeColor() 

      var idDictionary = [0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6] 
      idDictionary.removeValueForKey(pressed) 

      for (_, value) in idDictionary { 

       if value == 6 { 

       } 
       else { 

        let remainButtons = buttonArray[value] 
        remainButtons.backgroundColor = UIColor.blackColor() 
       } 
      } 

     default: 
      print("test") 
     } 

    } 

Répondre

0

Déplacez votre code de dessin en fonction de dessin comme ceci:

func drawTriangle() { 
    //Move draw rect code into here 
} 

et appeler cette fonction de drawRect. Aussi assurez-vous d'appeler le super dans drawRect

override func drawRect(rect: CGRect) { 
    super.drawRect(rect) 
    drawTriangle() 
} 

Ensuite, vous pouvez ajouter une variable sur le bouton pour dicter sa couleur et l'avez défini, vous pouvez définir la couleur des triangles

var triangleColor:UIColor = UIColor.blackColor() { 
    didSet { 
     drawTriangle() 
    } 
} 

Ensuite, il suffit de prendre la couleur lorsque vous dessinez le triangle:

Remplacer:

CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor) 

Avec:

CGContextSetFillColorWithColor(context, triangleColor.CGColor) 

alors vous devriez être en mesure de vérifier que si le bouton sur lequel vous appuyez Plot/Prix et définir la couleur des boutons correspondant à l'aide:

(triangleButtonVariable).triangleColor = YourColour 
+0

Je l'ai essayé, mais ça n'a pas marché. Je reçois également un avertissement dans ma console de débogage: : CGContextDrawPath: contexte non valide 0x0. Si vous souhaitez voir la trace, veuillez définir la variable d'environnement CG_CONTEXT_SHOW_BACKTRACE. Est-ce parce que vous ne pouvez pas appeler drawRect quand vous voulez? Je l'ai lu quelque part. – Kelvin

0

Si le réglage de la nouvelle couleur n'est pas étant fait à l'intérieur (ou à partir de) drawRect, vous obtiendrez l'erreur Invalid Context.

Essayer de définir la nouvelle couleur, puis dire sur le bouton pour setNeedsDisplay()