5 星评级不会通知 UITableView 更新值;自定义 UIView 类的作品

Posted

技术标签:

【中文标题】5 星评级不会通知 UITableView 更新值;自定义 UIView 类的作品【英文标题】:5-star rating doesn't inform UITableView of updated value; custom UIView class works 【发布时间】:2015-01-30 01:45:17 【问题描述】:

所以我做了the Ray Wenderlich 教程以获得 5 星评论视图,只是我修改它以进行半星评级。

看起来它工作得很好,但事实证明,自定义 UIView 并不总是更新评级值发生变化的 UITableView。

我添加了一个 NSLog() 来显示自定义类中的评分值,然后添加了一个标签来输出 TableView 中的值。看起来,它需要一个非常刻意的点击-拖动-停止-抬起手指动作来让它更新 TableView 值。有什么想法吗??以下是一些代码片段:

修改了“手柄触摸”

 (void)handleTouchAtLocation:(CGPoint)touchLocation 
    if (!self.editable) return;


    float newRating = 0;

    for(int i = self.imageViews.count - 1; i >= 0; i--) 
        UIImageView *imageView = [self.imageViews objectAtIndex:i];        
        CGFloat distance = touchLocation.x - imageView.frame.origin.x;

        if (distance <= 0) continue;
        if (distance < imageView.frame.size.width / 2) 
            newRating = i + 0.5;
            break;
         else if (distance > imageView.frame.size.width / 2)
            newRating = i + 1;
            break;
        

    

    self.rating = newRating;
    NSLog(@"Self.rating = %f", self.rating);
  

我的 tableView .h/.m 文件的片段

我的.h

@property (weak, nonatomic) IBOutlet RateView *queenRateView;

我的.m

   //Queen Performance Rating
    self.queenRateView.rating = 0;
    self.queenRateView.editable = YES;
    self.queenRateView.maxRating = 5;
    self.queenRateView.delegate = self;

- (void)rateView:(RateView *)rateView ratingDidChange:(float)rating 
    NSLog(@"Queen Rating from Class: %f", rating);

    queenRating = [NSNumber numberWithFloat: rating];
    NSLog(@"Queen Rating: %@", queenRating);
    self.queenRatingLabel.text = [NSString stringWithFormat:@"%@", queenRating];


【问题讨论】:

【参考方案1】:

我认为你搞砸了这部分:

(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event [self.delegate rateView:self ratingDidChange:self.rating];

【讨论】:

以上是关于5 星评级不会通知 UITableView 更新值;自定义 UIView 类的作品的主要内容,如果未能解决你的问题,请参考以下文章

按 5 星评级排序的更好方法是啥?

近年读了1065本书,挑出33本5星好书

2018左其盛好书榜(截至10月31日)

根据评论计算5星评级

使用表格的字体真棒 5 星评级

使用 PHP、MySQL、Jquery 和 Ajax 创建 5 星评级系统