diff --git a/trySwift.xcodeproj/project.pbxproj b/trySwift.xcodeproj/project.pbxproj index 143a0b0..16ced1b 100644 --- a/trySwift.xcodeproj/project.pbxproj +++ b/trySwift.xcodeproj/project.pbxproj @@ -649,7 +649,9 @@ 411F0B1F9D6446FAAE23A50E /* Frameworks */, F413680C9BA29129B4319377 /* Pods */, ); + indentWidth = 4; sourceTree = ""; + tabWidth = 4; }; FAFA15B91C69D31C00FEA4EA /* Products */ = { isa = PBXGroup; diff --git a/trySwift/OfficeHoursDetailViewController.swift b/trySwift/OfficeHoursDetailViewController.swift index b379e5c..2f3e01c 100644 --- a/trySwift/OfficeHoursDetailViewController.swift +++ b/trySwift/OfficeHoursDetailViewController.swift @@ -47,7 +47,7 @@ extension OfficeHoursDetailViewController { return cell case .speakerInfo: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SpeakerTableViewCell - cell.configure(withSpeaker: speaker, selectionEnabled: false, accessoryEnabled: false, delegate: self) + cell.configure(withSpeaker: speaker, selectionEnabled: false, accessoryEnabled: false, delegate: self, speakerImageDelegate: self) return cell case .bio: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as TextTableViewCell @@ -76,3 +76,11 @@ extension OfficeHoursDetailViewController { } } +extension OfficeHoursDetailViewController: SpeakerImageDelegate { + func didTapSpeakerImage(forSpeaker speaker: Speaker) { + let vc = SpeakerDetailViewController() + vc.speaker = speaker + self.navigationController?.pushViewController(vc, animated: true) + } +} + diff --git a/trySwift/SessionDetailsViewController.swift b/trySwift/SessionDetailsViewController.swift index dce3bfc..886bb5e 100644 --- a/trySwift/SessionDetailsViewController.swift +++ b/trySwift/SessionDetailsViewController.swift @@ -49,7 +49,7 @@ extension SessionDetailsViewController { return cell case .speakerInfo: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SpeakerTableViewCell - cell.configure(withSpeaker: presentation.speaker!, selectionEnabled: false, accessoryEnabled: false, delegate: self) + cell.configure(withSpeaker: presentation.speaker!, selectionEnabled: false, accessoryEnabled: false, delegate: self, speakerImageDelegate: self) return cell case .summary: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as TextTableViewCell @@ -76,3 +76,11 @@ extension SessionDetailsViewController { tableView.separatorStyle = .none } } + +extension SessionDetailsViewController: SpeakerImageDelegate { + func didTapSpeakerImage(forSpeaker speaker: Speaker) { + let vc = SpeakerDetailViewController() + vc.speaker = speaker + self.navigationController?.pushViewController(vc, animated: true) + } +} diff --git a/trySwift/SpeakerDetailViewController.swift b/trySwift/SpeakerDetailViewController.swift index bcd91cc..2cd4c0c 100644 --- a/trySwift/SpeakerDetailViewController.swift +++ b/trySwift/SpeakerDetailViewController.swift @@ -43,7 +43,7 @@ extension SpeakerDetailViewController { switch SpeakerDetail(rawValue: indexPath.row)! { case .header: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SpeakerTableViewCell - cell.configure(withSpeaker: speaker, selectionEnabled: false, accessoryEnabled: false, delegate: self) + cell.configure(withSpeaker: speaker, selectionEnabled: false, accessoryEnabled: false, delegate: self, speakerImageDelegate: nil) return cell case .bio: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as TextTableViewCell diff --git a/trySwift/SpeakerTableViewCell.swift b/trySwift/SpeakerTableViewCell.swift index b7a16c2..8006a60 100644 --- a/trySwift/SpeakerTableViewCell.swift +++ b/trySwift/SpeakerTableViewCell.swift @@ -10,6 +10,10 @@ import UIKit import Kingfisher import TrySwiftData +protocol SpeakerImageDelegate: class { + func didTapSpeakerImage(forSpeaker speaker: Speaker) +} + class SpeakerTableViewCell: UITableViewCell { @IBOutlet weak var speakerImageView: UIImageView! @@ -18,10 +22,14 @@ class SpeakerTableViewCell: UITableViewCell { fileprivate var speaker: Speaker? fileprivate weak var delegate: TwitterFollowDelegate? + fileprivate weak var speakerImageDelegate: SpeakerImageDelegate? override func awakeFromNib() { super.awakeFromNib() speakerTwitterButton.setTitleColor(.trySwiftAccentColor(), for: .normal) + speakerImageView.addGestureRecognizer( + UITapGestureRecognizer(target: self, action: #selector(didTapSpeakerImage)) + ) } @@ -33,7 +41,7 @@ class SpeakerTableViewCell: UITableViewCell { self.delegate?.followUser(speaker.twitter) } - func configure(withSpeaker speaker: Speaker, selectionEnabled: Bool = true, accessoryEnabled: Bool = true, delegate: TwitterFollowDelegate) { + func configure(withSpeaker speaker: Speaker, selectionEnabled: Bool = true, accessoryEnabled: Bool = true, delegate: TwitterFollowDelegate, speakerImageDelegate: SpeakerImageDelegate?) { let scale = UIScreen.main.scale let processor = RoundCornerImageProcessor(cornerRadius: 34, targetSize: CGSize(width: 67, height: 67)) speakerImageView.kf.setImage(with: speaker.imageURL, placeholder: nil, options: [.processor(processor), .scaleFactor(scale)]) @@ -52,5 +60,12 @@ class SpeakerTableViewCell: UITableViewCell { self.speaker = speaker self.delegate = delegate + self.speakerImageDelegate = speakerImageDelegate + } + + @objc + func didTapSpeakerImage() { + guard let speaker = speaker else { return } + self.speakerImageDelegate?.didTapSpeakerImage(forSpeaker: speaker) } } diff --git a/trySwift/SpeakerTableViewCell.xib b/trySwift/SpeakerTableViewCell.xib index 1d21317..f3cab09 100644 --- a/trySwift/SpeakerTableViewCell.xib +++ b/trySwift/SpeakerTableViewCell.xib @@ -18,7 +18,7 @@ - + diff --git a/trySwift/SpeakersViewController.swift b/trySwift/SpeakersViewController.swift index 086f5e7..54726e4 100644 --- a/trySwift/SpeakersViewController.swift +++ b/trySwift/SpeakersViewController.swift @@ -72,7 +72,7 @@ extension SpeakersViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SpeakerTableViewCell - cell.configure(withSpeaker: speakers[indexPath.row], delegate: self) + cell.configure(withSpeaker: speakers[indexPath.row], delegate: self, speakerImageDelegate: nil) return cell } diff --git a/trySwift/WorkshopDetailViewController.swift b/trySwift/WorkshopDetailViewController.swift index 55c021b..55ca908 100644 --- a/trySwift/WorkshopDetailViewController.swift +++ b/trySwift/WorkshopDetailViewController.swift @@ -56,7 +56,7 @@ extension WorkshopDetailViewController { return cell case .speakerInfo: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as SpeakerTableViewCell - cell.configure(withSpeaker: presentation.speaker!, selectionEnabled: false, accessoryEnabled: false, delegate: self) + cell.configure(withSpeaker: presentation.speaker!, selectionEnabled: false, accessoryEnabled: false, delegate: self, speakerImageDelegate: self) return cell case .summary: let cell = tableView.dequeueReusableCell(forIndexPath: indexPath) as TextTableViewCell @@ -107,3 +107,11 @@ extension WorkshopDetailViewController { } } +extension WorkshopDetailViewController: SpeakerImageDelegate { + func didTapSpeakerImage(forSpeaker speaker: Speaker) { + let vc = SpeakerDetailViewController() + vc.speaker = speaker + self.navigationController?.pushViewController(vc, animated: true) + } +} +