2016-04-14 25 views
0

So habe ich zwei UIButton's, sind beide zur Klasse verbunden LikeShape.swift enter image description hereändern UIButton Klasse zur Laufzeit

Ich habe eine andere Klasse LikeShapeDone.swift genannt, die ich zur Laufzeit wie folgt einstellen wollen:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    { 
     let imageCell = collectionView.dequeueReusableCellWithReuseIdentifier("imageCell", forIndexPath: indexPath) as! PostsCollectionViewCell 

     if (likedBy[indexPath.row].containsObject((PFUser.currentUser()?.username)!)){ 
       // Post is liked by the current user 
       imageCell.likeButton = LikeShape() 
       imageCell.dislikeButton = LikeShapeDone() 
      } 
      if (dislikedBy[indexPath.row].containsObject((PFUser.currentUser()?.username)!)){ 
       // Post is disliked by the current user 
       imageCell.dislikeButton = LikeShapeDone() 
       imageCell.likeButton = LikeShape() 
      } 
      else{ 
       // Post is not liked by the current user 
      } 
     // <---- End ImageCell Row ----> 
     return imageCell 
    } 

Aber nichts passiert .. Ich bin 100% sicher, dass der aktuelle Benutzer ist in likedBy und dislikedBy Die LikeShape-Klasse hat schwarze Taste, und LikeShapeDone hat rote Taste, aber die Tasten sind nur schwarz die ganze Zeit ... Irgendwelche Vorschläge?

+0

Vorschlag: eine Taste erstellen und die ändern Geben Sie zur Laufzeit nicht ganze Klasse oder ganze Schaltfläche ein. –

+0

@AshishKakkad Meinst du wie: 'imageCell.likeButton = LikeShape()'? Das habe ich versucht und habe nicht funktioniert. –

+0

Erstellen Sie eine Schaltfläche LikeDislikeButton.type = mögen oder nicht mögen. Wechsel zur Laufzeit –

Antwort

2

Wie in meinem Kommentar empfohlen, würde ich 1 Klasse für Ihre Schaltfläche erstellen, wo Sie den Typ der Schaltfläche direkt in Runtime festlegen können. Zum Beispiel:

public class LikeButton: UIButton { 

    public func setLike(type: String) { 

    switch(type) { 

    case "blue": 
     self.setBackgroundColor(UIColor.blueColor(), forState: .Normal) 
    break; 

    case "red": 
     self.setBackgroundColor(UIColor.redColor(), forState: .Normal) 
     break; 

    case "black": 
     self.setBackgroundColor(UIColor.blackColor(), forState: .Normal) 
     break; 

    case "white": 
     self.setBackgroundColor(UIColor.whiteColor(), forState: .Normal) 
     break; 

    default: 
    break 
    } 
} 

Nochmals bearbeiten: Dies macht nur Sinn, wenn Sie wirklich die aktuelle UIButton erweitern müssen. Dies ist sinnvoll, wenn Sie mehrere Parameter haben und diese nicht jedes Mal auf Ihre UIButton-Klasse festlegen möchten.

Sie könnten (natürlich) Set:

myButton.setBackgroundColor(UIColor.redColor(), forState: .Normal) //Any Color 

Usage of Code Top:

myLikeButton = LikeButton(frame: CGRectMake(0,0,200,50)) 
myLikeButton.setLike("blue") 

Oder (zur Laufzeit)

myLikeButton.setLike("red") 
+0

Können Sie Beispielcode hinzufügen, wo Sie 4 verschiedene Typen definieren? Um zwischen den Farben schwarz, weiß, rot und blau zu wechseln? –

+0

Erstelle ich eine schnelle Klasse oder Cocoa-Klasse? –

+0

Doesent Angelegenheit. CocoaTouch-Klassen bringt nur eine Boilerplate von Code – derdida