Skip to content

Commit 5eb17f8

Browse files
author
Jurvis Tan
committed
implemented session search
1 parent ac123e1 commit 5eb17f8

7 files changed

+300
-80
lines changed

FOSSAsia.xcodeproj/project.pbxproj

+15
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
28091E931C64B61C00E789CD /* RangeExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28091E921C64B61C00E789CD /* RangeExtension.swift */; };
1414
28091E9B1C64CC1A00E789CD /* TrackViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28091E9A1C64CC1A00E789CD /* TrackViewModel.swift */; };
1515
280DE5291C62FCB200E64020 /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = 280DE5281C62FCB200E64020 /* Podfile */; };
16+
281324ED1C672EE80072E730 /* SessionsSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281324EC1C672EE80072E730 /* SessionsSearchViewController.swift */; };
17+
281324EF1C6735430072E730 /* EventsBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281324EE1C6735430072E730 /* EventsBaseViewController.swift */; };
1618
2859B0FE1C5DF8D7009656FC /* EventViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859B0FD1C5DF8D7009656FC /* EventViewController.swift */; };
1719
2859B1001C5DFD09009656FC /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859B0FF1C5DFD09009656FC /* Colors.swift */; };
1820
2859B1021C5E29DC009656FC /* EventInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2859B1011C5E29DC009656FC /* EventInfoView.swift */; };
@@ -59,6 +61,8 @@
5961
28091E921C64B61C00E789CD /* RangeExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RangeExtension.swift; sourceTree = "<group>"; };
6062
28091E9A1C64CC1A00E789CD /* TrackViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackViewModel.swift; sourceTree = "<group>"; };
6163
280DE5281C62FCB200E64020 /* Podfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Podfile; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
64+
281324EC1C672EE80072E730 /* SessionsSearchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SessionsSearchViewController.swift; sourceTree = "<group>"; };
65+
281324EE1C6735430072E730 /* EventsBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventsBaseViewController.swift; sourceTree = "<group>"; };
6266
2859B0FD1C5DF8D7009656FC /* EventViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventViewController.swift; sourceTree = "<group>"; };
6367
2859B0FF1C5DFD09009656FC /* Colors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = "<group>"; };
6468
2859B1011C5E29DC009656FC /* EventInfoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventInfoView.swift; sourceTree = "<group>"; };
@@ -127,7 +131,9 @@
127131
2818A9311C62300300ECB57F /* View Controllers */ = {
128132
isa = PBXGroup;
129133
children = (
134+
281324EE1C6735430072E730 /* EventsBaseViewController.swift */,
130135
285F1B661C5AF7B100A7E0DD /* EventsViewController.swift */,
136+
281324EC1C672EE80072E730 /* SessionsSearchViewController.swift */,
131137
2859B0FD1C5DF8D7009656FC /* EventViewController.swift */,
132138
28091E8C1C6332A600E789CD /* FilterListViewController.swift */,
133139
285F1B681C5AF7B100A7E0DD /* SecondViewController.swift */,
@@ -321,6 +327,7 @@
321327
TargetAttributes = {
322328
285F1B601C5AF7B100A7E0DD = {
323329
CreatedOnToolsVersion = 7.2;
330+
DevelopmentTeam = EZ49532236;
324331
};
325332
};
326333
};
@@ -411,6 +418,7 @@
411418
buildActionMask = 2147483647;
412419
files = (
413420
285F1B691C5AF7B100A7E0DD /* SecondViewController.swift in Sources */,
421+
281324EF1C6735430072E730 /* EventsBaseViewController.swift in Sources */,
414422
28091E8D1C6332A600E789CD /* FilterListViewController.swift in Sources */,
415423
2859B1001C5DFD09009656FC /* Colors.swift in Sources */,
416424
285F1B8F1C5B069D00A7E0DD /* Observable.swift in Sources */,
@@ -423,6 +431,7 @@
423431
28091E8F1C636F9000E789CD /* FilterCell.swift in Sources */,
424432
285F1B671C5AF7B100A7E0DD /* EventsViewController.swift in Sources */,
425433
28091E911C64B0B900E789CD /* Constants.swift in Sources */,
434+
281324ED1C672EE80072E730 /* SessionsSearchViewController.swift in Sources */,
426435
285F1B921C5B06CC00A7E0DD /* Event.swift in Sources */,
427436
28A0BC941C5F50A2001625FB /* Schedule.swift in Sources */,
428437
285F1BB41C5B0FDC00A7E0DD /* SpeakerViewModel.swift in Sources */,
@@ -546,6 +555,8 @@
546555
baseConfigurationReference = E0CFBD2E35D709E001678331 /* Pods-FOSSAsia.debug.xcconfig */;
547556
buildSettings = {
548557
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
558+
CODE_SIGN_IDENTITY = "iPhone Developer";
559+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
549560
EMBEDDED_CONTENT_CONTAINS_SWIFT = "$(inherited)";
550561
FRAMEWORK_SEARCH_PATHS = (
551562
"$(inherited)",
@@ -557,6 +568,7 @@
557568
OTHER_LDFLAGS = "$(inherited)";
558569
PRODUCT_BUNDLE_IDENTIFIER = com.fossasia.FOSSAsia;
559570
PRODUCT_NAME = "$(TARGET_NAME)";
571+
PROVISIONING_PROFILE = "";
560572
SWIFT_OBJC_BRIDGING_HEADER = "FOSSAsia/Fossasia-Bridging-Header.h";
561573
USER_HEADER_SEARCH_PATHS = "";
562574
};
@@ -567,6 +579,8 @@
567579
baseConfigurationReference = 79D22ECB7ECA2ECF5403D3D1 /* Pods-FOSSAsia.release.xcconfig */;
568580
buildSettings = {
569581
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
582+
CODE_SIGN_IDENTITY = "iPhone Developer";
583+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
570584
EMBEDDED_CONTENT_CONTAINS_SWIFT = "$(inherited)";
571585
FRAMEWORK_SEARCH_PATHS = (
572586
"$(inherited)",
@@ -578,6 +592,7 @@
578592
OTHER_LDFLAGS = "$(inherited)";
579593
PRODUCT_BUNDLE_IDENTIFIER = com.fossasia.FOSSAsia;
580594
PRODUCT_NAME = "$(TARGET_NAME)";
595+
PROVISIONING_PROFILE = "";
581596
SWIFT_OBJC_BRIDGING_HEADER = "FOSSAsia/Fossasia-Bridging-Header.h";
582597
USER_HEADER_SEARCH_PATHS = "";
583598
};

FOSSAsia/Base.lproj/LaunchScreen.storyboard

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
33
<dependencies>
44
<deployment identifier="iOS"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
66
</dependencies>
77
<scenes>
88
<!--View Controller-->

FOSSAsia/Base.lproj/Main.storyboard

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
33
<dependencies>
44
<deployment identifier="iOS"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
66
</dependencies>
77
<scenes>
88
<!--Second View Controller-->
@@ -96,7 +96,7 @@
9696
</viewControllerPlaceholder>
9797
<placeholder placeholderIdentifier="IBFirstResponder" id="3WZ-Ee-761" userLabel="First Responder" sceneMemberID="firstResponder"/>
9898
</objects>
99-
<point key="canvasLocation" x="750" y="-345"/>
99+
<point key="canvasLocation" x="599" y="-347"/>
100100
</scene>
101101
</scenes>
102102
<resources>
+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
//
2+
// EventsBaseViewController.swift
3+
// FOSSAsia
4+
//
5+
// Created by Jurvis Tan on 7/2/16.
6+
// Copyright © 2016 FossAsia. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
class EventsBaseViewController: UIViewController {
12+
let kEventCellReuseIdentifier = "EventCell"
13+
var allEvents: [EventViewModel] = []
14+
15+
@IBOutlet weak var tableView: UITableView!
16+
17+
var viewModel: ScheduleViewModel? {
18+
didSet {
19+
viewModel?.events.observe {
20+
[unowned self] in
21+
self.allEvents = $0
22+
self.tableView.reloadData()
23+
}
24+
}
25+
}
26+
27+
override func viewWillAppear(animated: Bool) {
28+
super.viewWillAppear(animated)
29+
viewModel?.refresh()
30+
}
31+
32+
override func viewDidLoad() {
33+
super.viewDidLoad()
34+
// Do any additional setup after loading the view, typically from a nib.
35+
tableView.dataSource = self
36+
tableView.delegate = self
37+
}
38+
39+
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
40+
if (segue.identifier == "ShowEventDetail") {
41+
if let selectedIndexPath = self.tableView.indexPathForSelectedRow {
42+
let eventViewController = segue.destinationViewController as! EventViewController
43+
eventViewController.eventViewModel = allEvents[selectedIndexPath.row]
44+
}
45+
}
46+
}
47+
48+
func eventViewModelForIndexPath(path: NSIndexPath) -> EventViewModel {
49+
return allEvents[path.row]
50+
}
51+
52+
}
53+
54+
extension EventsBaseViewController: UITableViewDelegate {
55+
56+
}
57+
58+
extension EventsBaseViewController: UITableViewDataSource {
59+
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
60+
let cell = tableView.dequeueReusableCellWithIdentifier(kEventCellReuseIdentifier, forIndexPath: indexPath) as! EventCell
61+
let eventViewModel = allEvents[indexPath.row]
62+
cell.configure(withPresenter: eventViewModel)
63+
64+
return cell
65+
}
66+
67+
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
68+
return allEvents.count
69+
}
70+
71+
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
72+
tableView.deselectRowAtIndexPath(indexPath, animated: true)
73+
}
74+
75+
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
76+
// have to patch in code because IB wasn't listening to me
77+
return 70
78+
}
79+
}

FOSSAsia/EventsViewController.swift

+26-42
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,9 @@
99
import UIKit
1010
import MGSwipeTableCell
1111

12-
class EventsViewController: UIViewController {
13-
private let kEventCellReuseIdentifier = "EventCell"
14-
private var eventsArray: [EventViewModel] = []
15-
16-
@IBOutlet weak var tableView: UITableView!
17-
18-
var viewModel: ScheduleViewModel? {
19-
didSet {
20-
viewModel?.events.observe {
21-
[unowned self] in
22-
self.eventsArray = $0
23-
self.tableView.reloadData()
24-
}
25-
}
26-
}
12+
class EventsViewController: EventsBaseViewController {
2713

28-
override func viewWillAppear(animated: Bool) {
29-
super.viewWillAppear(animated)
30-
viewModel?.refresh()
31-
}
14+
var searchController: UISearchController!
3215

3316
override func viewDidLoad() {
3417
super.viewDidLoad()
@@ -39,49 +22,50 @@ class EventsViewController: UIViewController {
3922
self.shyNavBarManager.stickyExtensionView = true
4023

4124
viewModel = ScheduleViewModel(NSDate(year: 2015, month: 03, day: 14))
25+
26+
let searchResultsController = storyboard!.instantiateViewControllerWithIdentifier(SessionsSearchViewController.StoryboardConstants.identifier) as! SessionsSearchViewController
27+
searchResultsController.allEvents = self.allEvents
28+
29+
searchController = UISearchController(searchResultsController: searchResultsController)
30+
searchController.searchResultsUpdater = searchResultsController
31+
searchController.hidesNavigationBarDuringPresentation = false
32+
33+
searchController.searchBar.searchBarStyle = .Minimal
34+
searchController.searchBar.tintColor = Colors.creamTintColor
35+
searchController.searchBar.placeholder = "Search"
36+
if let textFieldInSearchBar = searchController.searchBar.valueForKey("searchField") as? UITextField {
37+
textFieldInSearchBar.textColor = Colors.creamTintColor
38+
}
39+
40+
navigationItem.titleView = searchController.searchBar
41+
42+
definesPresentationContext = true
43+
4244
}
4345

4446
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
4547
if (segue.identifier == "ShowEventDetail") {
4648
if let selectedIndexPath = self.tableView.indexPathForSelectedRow {
4749
let eventViewController = segue.destinationViewController as! EventViewController
48-
eventViewController.eventViewModel = eventsArray[selectedIndexPath.row]
50+
eventViewController.eventViewModel = allEvents[selectedIndexPath.row]
4951
}
5052
}
5153
}
52-
53-
func eventViewModelForIndexPath(path: NSIndexPath) -> EventViewModel {
54-
return eventsArray[path.row]
55-
}
5654

5755
}
5856

59-
extension EventsViewController: UITableViewDelegate {
60-
61-
}
6257

63-
extension EventsViewController: UITableViewDataSource {
64-
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
58+
59+
extension EventsViewController {
60+
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
6561
let cell = tableView.dequeueReusableCellWithIdentifier(kEventCellReuseIdentifier, forIndexPath: indexPath) as! EventCell
66-
let eventViewModel = eventsArray[indexPath.row]
62+
let eventViewModel = allEvents[indexPath.row]
6763
cell.configure(withPresenter: eventViewModel)
6864
cell.delegate = self
6965

7066
return cell
7167
}
7268

73-
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
74-
return eventsArray.count
75-
}
76-
77-
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
78-
tableView.deselectRowAtIndexPath(indexPath, animated: true)
79-
}
80-
81-
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
82-
// have to patch in code because IB wasn't listening to me
83-
return 70
84-
}
8569
}
8670

8771
extension EventsViewController: MGSwipeTableCellDelegate {

0 commit comments

Comments
 (0)