Skip to content

Commit

Permalink
Update the BVSDKDemo app to add hyperlinks on a review to a user's pr…
Browse files Browse the repository at this point in the history
…ofile in order to dispaly the user's reviews/questions/answers
  • Loading branch information
Tim Kelly committed Feb 3, 2017
1 parent ccd14e0 commit c98a2f0
Show file tree
Hide file tree
Showing 24 changed files with 2,352 additions and 85 deletions.
20 changes: 20 additions & 0 deletions Examples/BVSDKDemo/BVSDKDemo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,15 @@
73F020F41CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73F020F21CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.swift */; };
73F020F51CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 73F020F31CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.xib */; };
86891E156A6593CDBA88DDB3 /* Pods_BVSDKDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 636DE8CB900E4EB79DF875EF /* Pods_BVSDKDemo.framework */; };
870F130F1E436FB800D46BE6 /* conversationsAuthorWithIncludes.json in Resources */ = {isa = PBXBuildFile; fileRef = 870F130E1E436FB800D46BE6 /* conversationsAuthorWithIncludes.json */; };
871AD3F31D063A57006583E5 /* ProfileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871AD3F21D063A57006583E5 /* ProfileUtils.swift */; };
871AD4051D074E2F006583E5 /* post_successfulCreation.json in Resources */ = {isa = PBXBuildFile; fileRef = 871AD4041D074E2F006583E5 /* post_successfulCreation.json */; };
871AD40A1D088B9A006583E5 /* submitPhotoWithReview.json in Resources */ = {isa = PBXBuildFile; fileRef = 871AD4091D088B9A006583E5 /* submitPhotoWithReview.json */; };
871AD4111D08A5B8006583E5 /* ProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871AD40F1D08A5B8006583E5 /* ProfileViewController.swift */; };
871AD4121D08A5B8006583E5 /* ProfileViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 871AD4101D08A5B8006583E5 /* ProfileViewController.xib */; };
8731F40C1D10659A0046C484 /* enduranceCyclesAustin.gpx in Resources */ = {isa = PBXBuildFile; fileRef = 8731F40B1D10659A0046C484 /* enduranceCyclesAustin.gpx */; };
874577221E42394200D6CBD0 /* AuthorProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 874577201E42394200D6CBD0 /* AuthorProfileViewController.swift */; };
874577231E42394200D6CBD0 /* AuthorProfileViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 874577211E42394200D6CBD0 /* AuthorProfileViewController.xib */; };
8747F1E11D11C2A000DC8E42 /* LocationPermissionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8747F1DE1D11C2A000DC8E42 /* LocationPermissionViewController.swift */; };
8747F1E21D11C2A000DC8E42 /* PermissionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8747F1DF1D11C2A000DC8E42 /* PermissionViewController.swift */; };
8747F1E31D11C2A000DC8E42 /* PermissionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8747F1E01D11C2A000DC8E42 /* PermissionViewController.xib */; };
Expand Down Expand Up @@ -464,6 +467,7 @@
73F020F21CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuestionAnswerTableViewCell.swift; sourceTree = "<group>"; };
73F020F31CED4E8D00FC7D7D /* QuestionAnswerTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = QuestionAnswerTableViewCell.xib; sourceTree = "<group>"; };
85EE127F748BF21B76427E51 /* Pods-BVSDKDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BVSDKDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BVSDKDemo/Pods-BVSDKDemo.debug.xcconfig"; sourceTree = "<group>"; };
870F130E1E436FB800D46BE6 /* conversationsAuthorWithIncludes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = conversationsAuthorWithIncludes.json; path = ../../../Tests/Tests/resources/conversations/conversationsAuthorWithIncludes.json; sourceTree = "<group>"; };
871AD3F21D063A57006583E5 /* ProfileUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileUtils.swift; sourceTree = "<group>"; };
871AD4041D074E2F006583E5 /* post_successfulCreation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = post_successfulCreation.json; path = ../../../Tests/Tests/resources/curations/post_successfulCreation.json; sourceTree = "<group>"; };
871AD4091D088B9A006583E5 /* submitPhotoWithReview.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = submitPhotoWithReview.json; sourceTree = "<group>"; };
Expand All @@ -472,6 +476,8 @@
8731F40B1D10659A0046C484 /* enduranceCyclesAustin.gpx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = enduranceCyclesAustin.gpx; path = gpx/enduranceCyclesAustin.gpx; sourceTree = "<group>"; };
8742A3781D7864640043B4A3 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
8742A37A1D7869370043B4A3 /* UserNotificationsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotificationsUI.framework; path = System/Library/Frameworks/UserNotificationsUI.framework; sourceTree = SDKROOT; };
874577201E42394200D6CBD0 /* AuthorProfileViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AuthorProfileViewController.swift; path = Conversations/AuthorProfileViewController.swift; sourceTree = "<group>"; };
874577211E42394200D6CBD0 /* AuthorProfileViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AuthorProfileViewController.xib; path = Conversations/AuthorProfileViewController.xib; sourceTree = "<group>"; };
8747F1DE1D11C2A000DC8E42 /* LocationPermissionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LocationPermissionViewController.swift; path = BVSDKDemo/Login/LocationPermissionViewController.swift; sourceTree = "<group>"; };
8747F1DF1D11C2A000DC8E42 /* PermissionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PermissionViewController.swift; path = BVSDKDemo/Login/PermissionViewController.swift; sourceTree = "<group>"; };
8747F1E01D11C2A000DC8E42 /* PermissionViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PermissionViewController.xib; path = BVSDKDemo/Login/PermissionViewController.xib; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1009,6 +1015,7 @@
739C0EEF1CDD9EB700CE771B /* Conversations */ = {
isa = PBXGroup;
children = (
8745771A1E42390C00D6CBD0 /* AuthorProfile */,
738E72471CEEE48A00D30617 /* ProductDetailHeaderView.swift */,
7338438E1CED58A300928760 /* RatingsAndReviews */,
73F020F11CED4E6300FC7D7D /* QuestionAnswer */,
Expand All @@ -1025,6 +1032,7 @@
8792AB971D91E6140055B519 /* storeBulkFeedWithStatistics.json */,
87A3192A1CF4938E000D3D0F /* conversationsQuestionsIncludeAnswers.json */,
87A319341CF4942F000D3D0F /* conversationsReviewsEnduranceCycles.json */,
870F130E1E436FB800D46BE6 /* conversationsAuthorWithIncludes.json */,
87A319321CF493E3000D3D0F /* curationsEnduranceCycles.json */,
871AD4041D074E2F006583E5 /* post_successfulCreation.json */,
87A3192E1CF493AF000D3D0F /* recommendationsResult.json */,
Expand Down Expand Up @@ -1085,6 +1093,15 @@
name = GPX;
sourceTree = "<group>";
};
8745771A1E42390C00D6CBD0 /* AuthorProfile */ = {
isa = PBXGroup;
children = (
874577201E42394200D6CBD0 /* AuthorProfileViewController.swift */,
874577211E42394200D6CBD0 /* AuthorProfileViewController.xib */,
);
name = AuthorProfile;
sourceTree = "<group>";
};
8747F1DD1D11C20E00DC8E42 /* Login */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1593,6 +1610,7 @@
733843921CED58C800928760 /* WriteReviewViewController.xib in Resources */,
87BA80831D342E3200AFA54D /* LocationSettings.xib in Resources */,
15EE0E201DA553C700FADEE0 /* StoreWriteReviewViewController.xib in Resources */,
874577231E42394200D6CBD0 /* AuthorProfileViewController.xib in Resources */,
15AE81A51E01ADF9009C1478 /* LocationCollectionViewCell.xib in Resources */,
877216801D3FDAD4007E5C6C /* conversationsReviewsEnduranceCycles_SortLowestRated.json in Resources */,
15AE81AA1E01B1F3009C1478 /* HeaderCollectionViewCell.xib in Resources */,
Expand All @@ -1612,6 +1630,7 @@
736D4CF11CDED0C40095EE6B /* icon_bvlogo.png in Resources */,
8731F40C1D10659A0046C484 /* enduranceCyclesAustin.gpx in Resources */,
733071C21CEF963D00B9F505 /* conversationsProductsIncludeStats.json in Resources */,
870F130F1E436FB800D46BE6 /* conversationsAuthorWithIncludes.json in Resources */,
736D4CB31CDEC5730095EE6B /* [email protected] in Resources */,
871AD40A1D088B9A006583E5 /* submitPhotoWithReview.json in Resources */,
733BCEF31CF638F000045FC2 /* [email protected] in Resources */,
Expand Down Expand Up @@ -1906,6 +1925,7 @@
8783098C1CECF3F70097FC48 /* QuestionAnswerViewController.swift in Sources */,
87BA80871D3434C500AFA54D /* LocationPreferenceUtils.swift in Sources */,
87CD52411CE610A500FC2726 /* NewProductCurationsTableViewCell.swift in Sources */,
874577221E42394200D6CBD0 /* AuthorProfileViewController.swift in Sources */,
736D4CEF1CDED0C40095EE6B /* ExtensionShareViewController.swift in Sources */,
87CF9A6A1DEE3D0A0069D2B9 /* CartProductTableViewCell.swift in Sources */,
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "[email protected]",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "[email protected]",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,15 @@ class AnswerTableViewCell: BVAnswerTableViewCell {
@IBOutlet weak var answerText : UILabel!
@IBOutlet weak var usersFoundHelpfulLabel: UILabel!

var onAuthorNickNameTapped : ((_ authorId : String) -> Void)? = nil

override var answer : BVAnswer? {
didSet {
authorNickname.text = answer!.userNickname
if (answer?.userNickname != nil){
self.linkAuthorNameLabel(fullText: answer!.userNickname!, author: answer!.userNickname!)
} else {
self.authorNickname.text = ""
}
answerText.text = answer!.answerText
if let submissionTime = answer!.submissionTime{
writtenAtLabel.text = dateTimeAgo(submissionTime)
Expand Down Expand Up @@ -75,4 +81,29 @@ class AnswerTableViewCell: BVAnswerTableViewCell {
}
}

func linkAuthorNameLabel(fullText : String, author : String) {

let attributedString = NSMutableAttributedString(string: fullText)
attributedString.setAttributes([:], range: NSRange(0..<attributedString.length)) // remove all the default attributes

let colorFontAttribute = [NSForegroundColorAttributeName: UIColor.blue]

attributedString.addAttributes(colorFontAttribute , range: (fullText as NSString).range(of: author, options: .backwards))

self.authorNickname.attributedText = attributedString
self.authorNickname.isUserInteractionEnabled = true

// Here the full label will be tappable. If you wanted to make just a part of the label
// tappable you'd need to check the frame when tapped, or use a different label.
let tapAuthorGesture = UITapGestureRecognizer(target: self, action: #selector(RatingTableViewCell.tappedAuthor(_:)))
self.authorNickname.addGestureRecognizer(tapAuthorGesture)
}

func tappedAuthor(_ sender:UITapGestureRecognizer){
if let onAuthorNameTapped = self.onAuthorNickNameTapped {
onAuthorNameTapped((answer?.authorId)!)
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ class AnswersViewController: UIViewController, UITableViewDataSource, UITableVie
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "AnswerListHeaderCell") as! AnswerListHeaderCell


cell.question = question

return cell
Expand All @@ -104,6 +103,10 @@ class AnswersViewController: UIViewController, UITableViewDataSource, UITableVie
let cell = tableView.dequeueReusableCell(withIdentifier: "AnswerTableViewCell") as! AnswerTableViewCell

cell.answer = question.answers[indexPath.row]
cell.onAuthorNickNameTapped = { (authorId) -> Void in
let authorVC = AuthorProfileViewController(nibName: "AuthorProfileViewController", bundle: nil, authorId: authorId)
self.navigationController?.pushViewController(authorVC, animated: true)
}

return cell
}
Expand Down
Loading

0 comments on commit c98a2f0

Please sign in to comment.