Swift, как добавить 5-звездочный рейтинг для пользователей, чтобы голосовать с помощью Firebase - PullRequest
0 голосов
/ 25 августа 2018

Я создаю приложение для рейтинга ресторанов в Swift, которое позволяет пользователям оценивать рестораны по 5-звездочной шкале (точно так же, как Zomato и Yelp). Я буду использовать Firebase для хранения рейтинга каждого пользователя для определенного ресторана, а затем взять среднее значение пользовательских рейтингов и отобразить его в приложении. Каждой ячейке табличного представления будет присвоен звездный рейтинг (каждая ячейка табличного представления соответствует ресторану).

Однако я глубоко застрял в проекте. Я не могу понять, как добавить рейтинг пользователя в базу данных. Мое приложение не требует регистрации пользователя или страницы входа, пользователи могут напрямую оценивать рестораны. Кроме того, как я могу убедиться, что пользователи могут голосовать только один раз за один ресторан? Буду признателен за любую помощь! Заранее спасибо.

Вот мой код:

var starsRating = 0
var starsEmptyPicName = "star" // can change to empty star picture name
var starsFilledPicName = "starfill" // can change to filled star picture name
override func draw(_ rect: CGRect) {
let starButtons = self.subviews.filter{$0 is UIButton}
var starTag = 1
for button in starButtons {
    if let button = button as? UIButton{
        button.setImage(UIImage(named: starsEmptyPicName), for: .normal)
        button.addTarget(self, action: #selector(self.pressed(sender:)), for: .touchUpInside)
        button.tag = starTag
        starTag = starTag + 1
    }
}
setStarsRating(rating:starsRating)
}

func setStarsRating(rating:Int){
self.starsRating = rating
let stackSubViews = self.subviews.filter{$0 is UIButton}
for subView in stackSubViews {
    if let button = subView as? UIButton{
        if button.tag > starsRating {
            button.setImage(UIImage(named: starsEmptyPicName), for: .normal)
        }else{
            button.setImage(UIImage(named: starsFilledPicName), for: .normal)
        }
    }
  }
 }

@objc func pressed(sender: UIButton) {
    setStarsRating(rating: sender.tag)

 }
} 

А вот мои функции просмотра таблицы:

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
 return identifiers.count //identifiers is my big restaurants array
}



 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "CellThree")
        cell.textLabel!.text = identifiers[indexPath.row]
        return cell
    }

1 Ответ

0 голосов
/ 26 августа 2018

Я бы использовал CoreData для сохранения, если пользователь уже проголосовал.

  1. Когда пользователь оценивает один из ресторанов, просто создайте новую запись в основных данных с названием или идентификатором ресторана.

  2. Перед каждым голосованием я должен проверить, существуют данные или нет.Если нет, пользователь может голосовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...