protocol ClassFeedbackCellDelegate {
func sharePressed(cell: FeedbackCell)
}
class FeedbackCell: UITableViewCell {
var delegate: ClassFeedbackCellDelegate?
@IBOutlet weak var cosmosViewBelongingToFeedBackCell: CosmosView!
@IBOutlet weak var submitButtonOutlet: UIButton!
@IBAction func submitFeedBack(_ sender: Any) {
delegate?.sharePressed(cell: self)
}
}
class DetailViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ContentCell")
let feedbackCell = tableView.dequeueReusableCell(withIdentifier: "FeedbackCell") as? FeedbackCell
feedbackCell?.delegate = self //assign self as the delegate
if bookingCompleted && indexPath.section == 0 {
//default rating when tableView loads for first time
feedbackCell?.cosmosViewBelongingToFeedBackCell.rating = 4
return feedbackCell ?? UITableViewCell()
}
(cell?.contentView.viewWithTag(1) as? UILabel)?.text = titles[indexPath.row]
(cell?.contentView.viewWithTag(2) as? UILabel)?.text = titlesToValues[titles[indexPath.row]]
return cell ?? UITableViewCell()
}
}
extension DetailViewController: ClassFeedbackCellDelegate {
func sharePressed(cell: FeedbackCell) {
print("sharePressed was called ")// prints out
cell.cosmosViewBelongingToFeedBackCell.didFinishTouchingCosmos = {
rating in
print("rating here in extension is \(rating)")//doesn't print out
}
}
}
:
// 사용자로부터 보아 손가락을 올려 점을 변경 완료 될 때 호출된다. sharePressed(cell: FeedbackCell)
가 호출 될 때 cosmosView.didFinishTouchingCosmos = {에서의 평가가}
그래서, 사용자는 이미이 당신의 필요에 맞게하지 않는 그의 손가락을 해제했다.
대신, 당신은 아마이 작업을 수행 할 수 있습니다 등급은 사용자가 스크롤하면 테이블 뷰 재설정됩니다로
func sharePressed(cell: FeedbackCell) {
print("sharePressed was called ")// prints out
print("rating: \(cell.cosmosViewBelongingToFeedBackCell.rating)")
}
또한, 당신은 어딘가에 등급을 저장해야합니다.
편집 : 현재 등급을 추적하려면
, 당신이 프로토콜을 수정하고 FeedbackCell
에 리스너를 추가 할 수 있습니다 DetailViewController
에서 다음
protocol ClassFeedbackCellDelegate {
func sharePressed(cell: FeedbackCell)
func ratingDidChange(rating: Float)
}
class FeedbackCell: UITableViewCell {
var delegate: ClassFeedbackCellDelegate?
@IBOutlet weak var cosmosViewBelongingToFeedBackCell: CosmosView!
@IBOutlet weak var submitButtonOutlet: UIButton!
@IBAction func submitFeedBack(_ sender: Any) {
delegate?.sharePressed(cell: self)
}
override func awakeFromNib() {
super.awakeFromNib()
cosmosViewBelongingToFeedBackCell.didFinishTouchingCosmos = {
rating in
self.delegate?.ratingDidChange(rating)
}
}
}
:
을
extension DetailViewController: ClassFeedbackCellDelegate {
func ratingDidChange(rating: Float) {
print(rating)
}
}
'IBAction func submitFeedBack'가'FeedbackCell' 또는'DetailViewController'에 있어야합니까? 네이티브 UIPickerView와 같은 동작을 만들고 싶습니다. 예를 들어 사용자가 cosmosView에서 손가락을 떼면'DetailViewController' 안에 별 등급을받을 수 있습니다. 기본적으로 나는 CosmosView에서'FeedbackCell'에있는 'DetailViewController'에 대한 참조를 얻을 필요가 있습니다. 그래서'cosmosView.didFinishTouchingCosmos = {rating in // 여기서 값을 사용하십시오}'할 수 있습니다. 감사합니다. – bibscy
@bibscy See my 편집 된 답변. – chengsam
그것은 매력처럼 작동합니다. 덕분에 – bibscy