web-dev-qa-db-fra.com

Existe-t-il des contrôles disponibles pour le classement par étoiles?

Existe-t-il des contrôles disponibles pour le classement par étoiles dans iOS? Donc, je peux l'utiliser dans UITableviewCell ?? 

Je sais qu'il existe des contrôles open source tels que DYRating, etc., mais je ne suis pas en mesure de l'ajouter dans la cellule tableview.

16
Naveen

Vous pouvez vérifier le classement ASStar.

Ajoutez le contrôle directement à votre contrôleur de vue ou ajoutez-le dans votre cellule.

Et voici lien github .

11
user2326647

Je recommande HCSStarRatingView . Il a une apparence native et supporte également IB_DESIGNABLE et IBInspectable.

HCSStarRatingView

17
Hlung

Jetez un coup d'œil, cela devrait vous convenir:

https://www.cocoacontrols.com/search?utf8=%E2%9C%93&q=star+rating

7
Sebastian Łuczak

Note: Ceci est un "AFFICHAGE UNIQUEMENT" .....  STARS

J'ai adopté une approche différente ici, j'ai créé une étiquette avec une chaîne attribuée en utilisant une police avec des étoiles, vous pouvez consulter ma catégorie ici. J'ai utilisé la police "SS Pika",

#import "NSMutableAttributedString+Stars.h"

@implementation NSMutableAttributedString (Stars)

+ (NSAttributedString *)starWithRating:(CGFloat)rating
                            outOfTotal:(NSInteger)totalNumberOfStars
                          withFontSize:(CGFloat) fontSize{
    UIFont *currentFont = [UIFont fontWithName:@"SS Pika" size:fontSize];
    NSDictionary *activeStarFormat = @{
                                           NSFontAttributeName : currentFont,
                                           NSForegroundColorAttributeName : [UIColor redColor]
                                           };
    NSDictionary *inactiveStarFormat = @{
                                             NSFontAttributeName : currentFont,
                                             NSForegroundColorAttributeName : [UIColor lightGrayColor]
                                             };

    NSMutableAttributedString *starString = [NSMutableAttributedString new];

    for (int i=0; i < totalNumberOfStars; ++i) {
        //Full star
        if (rating >= i+1) {
            [starString appendAttributedString:[[NSAttributedString alloc]
                                               initWithString:@"\u22C6 " attributes:activeStarFormat]];
        }
        //Half star
        else if (rating > i) {
            [starString appendAttributedString:[[NSAttributedString alloc]
                                               initWithString:@"\uE1A1 " attributes:activeStarFormat]];
        }
        // Grey star
        else {
            [starString appendAttributedString:[[NSAttributedString alloc]
                                               initWithString:@"\u22C6 " attributes:inactiveStarFormat]];
        }

    }
    return starString;
}
@end

USAGE:

self.ratingLabel.attributedText = [NSMutableAttributedString starWithRating:rating outOfTotal:5 withFontSize:9.0f];

Voici la version Swift

extension NSMutableAttributedString{

    func starWithRating(rating:Float, outOfTotal totalNumberOfStars:NSInteger, withFontSize size:CGFloat) ->NSAttributedString{


        let currentFont = UIFont(name: "<USE UR FONT HERE>", size: size)!

        let activeStarFormat = [ NSFontAttributeName:currentFont, NSForegroundColorAttributeName: UIColor.redColor()];

        let inactiveStarFormat = [ NSFontAttributeName:currentFont, NSForegroundColorAttributeName: UIColor.lightGrayColor()];

        let starString = NSMutableAttributedString()

        for(var i = 0; i < totalNumberOfStars; ++i){

            if(rating >= Float(i+1)){
                // This is for selected star. Change the unicode value according to the font that you use
                starString.appendAttributedString(NSAttributedString(string: "\u{22C6} ", attributes: activeStarFormat))
            }
            else if (rating > Float(i)){
                // This is for selected star. Change the unicode value according to the font that you use
                starString.appendAttributedString(NSAttributedString(string: "\u{E1A1} ", attributes: activeStarFormat))
            }
            else{
                // This is for de-selected star. Change the unicode value according to the font that you use
                starString.appendAttributedString(NSAttributedString(string: "\u{22C6} ", attributes: inactiveStarFormat))
            }
        }

        return starString
    }
}

USAGE:

starLabel.attributedText = NSMutableAttributedString().starWithRating(3.5, outOfTotal: 5, withFontSize: 8.0)
starLabelFull.attributedText = NSMutableAttributedString().starWithRating(5, outOfTotal: 5, withFontSize: 8.0)
starLabelZero.attributedText = NSMutableAttributedString().starWithRating(0, outOfTotal: 5, withFontSize: 8.0)
4
anoop4real
2
user1113101

Swift3

https://github.com/marketplacer/Cosmos

  • install pod

    target 'TargetName' do

    pod 'Cosmos'

  • Installer le fichier pod avec cette commande pod install

  • Mettez un simple UIView dans votre scénario et donnez le nom de la classe sous la forme CosmosView et le nom du module Cosmos

 enter image description here

ICI VOUS POUVEZ ACCEDER AUX ATTRIBUTS 

 enter image description here

2

Utilisez https://github.com/hugocampossousa/HCSStarRatingView . il est facile de mettre cela en œuvre. écrivez simplement ces lignes de code . Créez IBOutlet HCSStarRatingView pour dans le fichier .h et créez une chaîne pour stocker la valeur d'évaluation.

@property (weak, nonatomic) IBOutlet HCSStarRatingView *starRatingView;
@property (weak, nonatomic) NSString *ratingStr;

dans le fichier .m, écrivez ces lignes

self.starRatingView.maximumValue = 5;
self.starRatingView.minimumValue = 0;
self.starRatingView.value = 0;
self.starRatingView.tintColor = [UIColor yellowColor];
self.starRatingView.allowsHalfStars = YES;
self.starRatingView.emptyStarImage = [[UIImage imageNamed:@"heart-empty"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.starRatingView.filledStarImage = [[UIImage imageNamed:@"heart-full"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.starRatingView addTarget:self action:@selector(didChangeValue:) forControlEvents:UIControlEventValueChanged];

- (IBAction)didChangeValue:(HCSStarRatingView *)sender {
   NSLog(@"Changed rating to %.1f", sender.value);
  ratingStr = [NSString stringWithFormat:@"%.1f",sender.value];
  if([hostRatingStr isEqualToString:@"-0.0"]){
      self.ratingLbl.text = @"0.0";
  }else{
      self.ratingLbl.text = hostRatingStr;
   }
 }
1
User558

Oui, il existe de nombreuses bibliothèques que vous pouvez utiliser pour créer des contrôles tels que cosmos Bibliothèque de contrôle de classement Cosmos

si vous voulez quelque chose comme ça qui ressemble à un graphe de classement (comme celui de l'image), alors vous pouvez voir ce dépôt dans github Affichage du graphique d'évaluation sous iOS

 enter image description here

1
Nikesh Jha

Je viens d'écrire cette simple sous-classe UIView qui dessine les étoiles allant de 0 à 5, y compris les demi-étoiles. Vous pouvez définir la couleur avec la propriété tintColor et définir l'évaluation dans l'éditeur d'interface. La largeur de la vue doit être réglée sur 5 * height.

 star rating

class StarsView: UIView {

    @IBInspectable var rating: Double = 5.0 {
        didSet {
            setNeedsLayout()
        }
    }

    func starPath(size: CGFloat, full: Bool) -> UIBezierPath {
        let fullPoints = [CGPoint(x: 0.5, y: 0.03), CGPoint(x: 0.61, y: 0.38), CGPoint(x: 0.99, y: 0.38), CGPoint(x: 0.68, y: 0.61), CGPoint(x: 0.8, y: 0.97), CGPoint(x: 0.5, y: 0.75), CGPoint(x: 0.2, y: 0.97), CGPoint(x: 0.32, y: 0.61), CGPoint(x: 0.01, y: 0.38), CGPoint(x: 0.39, y: 0.38)].map({ CGPoint(x: $0.x * size, y: $0.y * size) })
        let halfPoints = [CGPoint(x: 0.5, y: 0.03), CGPoint(x: 0.5, y: 0.75), CGPoint(x: 0.2, y: 0.97), CGPoint(x: 0.32, y: 0.61), CGPoint(x: 0.01, y: 0.38), CGPoint(x: 0.39, y: 0.38)].map({ CGPoint(x: $0.x * size, y: $0.y * size) })
        let points = full ? fullPoints : halfPoints
        let starPath = UIBezierPath()
        starPath.move(to: points.last!)
        for point in points {
            starPath.addLine(to: point)
        }
        return starPath
    }

    func starLayer(full: Bool) -> CAShapeLayer {
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = starPath(size: bounds.size.height, full: full).cgPath
        shapeLayer.fillColor = tintColor.cgColor
        return shapeLayer
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        let sublayers = layer.sublayers
        for sublayer in sublayers ?? [] {
            sublayer.removeFromSuperlayer()
        }
        for i in 1...5 {
            if rating >= Double(i) - 0.5 {
                let star = starLayer(full: rating >= Double(i))
                star.transform = CATransform3DMakeTranslation(bounds.size.height * CGFloat(i - 1), 0, 0)
                layer.addSublayer(star)
            }
        }
    }
}
0
Leszek Szary

Si vous ne voulez que des nombres entiers d'étoiles, vous pouvez utiliser un tableau de chaînes simple et l'utiliser pour définir la propriété text d'un libellé UILabel.

let ratingsDisplay = [
    "★☆☆☆☆",
    "★★☆☆☆",
    "★★★☆☆",
    "★★★★☆",
    "★★★★★"
]

let rating = 4
let label = UILabel()
label.text = ratingsDisplay[rating - 1]

Assurez-vous de définir la police de UILabel sur celle qui affiche les étoiles noires et blanches de la même taille. Beaucoup mais pas tous le font.

0
closetCoder

Utilisez https://github.com/shantaramk/RatingView .

Il est facile de mettre en œuvre cela. Il suffit de suivre les étapes ci-dessous: 

Définir la vue en étoile IBOutlet

    @IBOutlet weak var rateView: StarRateView!

Préparer l'affichage du taux d'étoile

func setupStarRateView() {
    self.rateView.delegate = self
    self.rateView.maxCount = 5
    self.rateView.fillImage = UIImage(named: "fill_star")!
    self.rateView.emptyImage = UIImage(named: "empty_star")!
}

Adopter délégué délégué

extension RateServiceViewController: RatingViewDelegate {

func updateRatingFormatValue(_ value: Int) {
    print("Rating : = ", value)
    }
}
0
Shantaram Kokate