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

时间:2015-01-30 01:45:18

标签: ios uitableview uiview

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

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

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

修改后的“处理触摸”

 (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 个答案:

答案 0 :(得分:0)

我认为你弄乱了这一部分:

  • (void)touchesEnded:(NSSet *)触及withEvent:(UIEvent *)event { [self.delegate rateView:self ratingDidChange:self.rating]; }