diff --git a/Sources/Tropos/Resources/Nibs/TRDailyForecastView.xib b/Sources/Tropos/Resources/Nibs/DailyForecastView.xib similarity index 100% rename from Sources/Tropos/Resources/Nibs/TRDailyForecastView.xib rename to Sources/Tropos/Resources/Nibs/DailyForecastView.xib diff --git a/Sources/Tropos/ViewControllers/TRWeatherViewController.m b/Sources/Tropos/ViewControllers/TRWeatherViewController.m index 854b7ec..9a8d6de 100644 --- a/Sources/Tropos/ViewControllers/TRWeatherViewController.m +++ b/Sources/Tropos/ViewControllers/TRWeatherViewController.m @@ -1,6 +1,6 @@ +#import "Tropos-Swift.h" #import "TRWeatherViewController.h" #import "TRWeatherController.h" -#import "TRDailyForecastView.h" #import "TRRefreshControl.h" #import "TRAnalyticsController.h" #import "UIScrollView+TRReactiveCocoa.h" diff --git a/Sources/Tropos/Views/DailyForecastView.swift b/Sources/Tropos/Views/DailyForecastView.swift new file mode 100644 index 0000000..bb694ba --- /dev/null +++ b/Sources/Tropos/Views/DailyForecastView.swift @@ -0,0 +1,35 @@ +import UIKit +import TroposCore + +@objc(TRDailyForecastView) public class DailyForecastView: UIView { + @IBOutlet var dayOfWeekLabel: UILabel! + @IBOutlet var highTemperatureLabel: UILabel! + @IBOutlet var lowTemperatureLabel: UILabel! + @IBOutlet var conditionsImageView: UIImageView! + @IBOutlet var contentView: DailyForecastView! + + @objc public var viewModel: DailyForecastViewModel? { + didSet { + dayOfWeekLabel.text = viewModel?.dayOfWeek + conditionsImageView.image = viewModel?.conditionsImage + highTemperatureLabel.text = viewModel?.highTemperature + lowTemperatureLabel.text = viewModel?.lowTemperature + } + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + public override func awakeFromNib() { + super.awakeFromNib() + let mainBundle = Bundle.main + mainBundle.loadNibNamed(String(describing: DailyForecastView.self), owner: self) + addSubview(contentView) + } + + public override func layoutSubviews() { + super.layoutSubviews() + contentView.frame = bounds + } +} diff --git a/Sources/Tropos/Views/TRDailyForecastView.h b/Sources/Tropos/Views/TRDailyForecastView.h deleted file mode 100644 index 8e931e2..0000000 --- a/Sources/Tropos/Views/TRDailyForecastView.h +++ /dev/null @@ -1,9 +0,0 @@ -@import UIKit; - -@class TRDailyForecastViewModel; - -@interface TRDailyForecastView : UIView - -@property (nonatomic) TRDailyForecastViewModel *viewModel; - -@end diff --git a/Sources/Tropos/Views/TRDailyForecastView.m b/Sources/Tropos/Views/TRDailyForecastView.m deleted file mode 100644 index dde076f..0000000 --- a/Sources/Tropos/Views/TRDailyForecastView.m +++ /dev/null @@ -1,38 +0,0 @@ -@import TroposCore; -#import "TRDailyForecastView.h" - -@interface TRDailyForecastView () - -@property (weak, nonatomic) IBOutlet UILabel *dayOfWeekLabel; -@property (weak, nonatomic) IBOutlet UIImageView *conditionsImageView; -@property (weak, nonatomic) IBOutlet UILabel *highTemperatureLabel; -@property (weak, nonatomic) IBOutlet UILabel *lowTemperatureLabel; -@property (strong, nonatomic) IBOutlet TRDailyForecastView *contentView; - -@end - -@implementation TRDailyForecastView - -- (void)awakeFromNib -{ - [super awakeFromNib]; - [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil]; - [self addSubview:self.contentView]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - self.contentView.frame = self.bounds; -} - -- (void)setViewModel:(TRDailyForecastViewModel *)viewModel -{ - _viewModel = viewModel; - self.dayOfWeekLabel.text = viewModel.dayOfWeek; - self.conditionsImageView.image = viewModel.conditionsImage; - self.highTemperatureLabel.text = viewModel.highTemperature; - self.lowTemperatureLabel.text = viewModel.lowTemperature; -} - -@end diff --git a/Tropos.xcodeproj/project.pbxproj b/Tropos.xcodeproj/project.pbxproj index ee98ddf..326080a 100644 --- a/Tropos.xcodeproj/project.pbxproj +++ b/Tropos.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 0F9A6CB421C9A9D40035C811 /* CLLocation+TRRecentLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9A6CB121C996EC0035C811 /* CLLocation+TRRecentLocation.swift */; }; 0F9A6CBA21CBF4C30035C811 /* LocationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F9A6CB921CBF4C30035C811 /* LocationController.swift */; }; + 0FB1907B21E3D8E800A2A8CA /* DailyForecastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB1907A21E3D8E800A2A8CA /* DailyForecastView.swift */; }; 4A21D76820C9E6FA0055A2AF /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A21D76720C9E6FA0055A2AF /* IntentHandler.swift */; }; 4A21D76C20C9E6FB0055A2AF /* TroposIntents.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4A21D76520C9E6FA0055A2AF /* TroposIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 4A5109D520C9CB8100F993FC /* INInteraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A5109D420C9CB8100F993FC /* INInteraction.swift */; }; @@ -112,14 +113,13 @@ 4AFCB1EA21D6C32100176FDD /* AppCenterCrashes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AFCB1E721D6C2F800176FDD /* AppCenterCrashes.framework */; }; 4D0A5C3D1A3A53DD0084C41E /* CWForecastDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D0A5C3C1A3A53DD0084C41E /* CWForecastDetailView.xib */; }; 4D1ABA0B1A89686200B7F8FB /* TRNavigationBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1ABA0A1A89686200B7F8FB /* TRNavigationBar.m */; }; - 4D3336F61A80BE16001BA9A8 /* TRDailyForecastView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D3336F51A80BE16001BA9A8 /* TRDailyForecastView.xib */; }; + 4D3336F61A80BE16001BA9A8 /* DailyForecastView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4D3336F51A80BE16001BA9A8 /* DailyForecastView.xib */; }; 4D49554C1A8C298A0066F278 /* TRRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D49554B1A8C298A0066F278 /* TRRefreshView.m */; }; 4D49554F1A8C29C30066F278 /* TRCircularProgressLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D49554E1A8C29C30066F278 /* TRCircularProgressLayer.m */; }; 4D4955521A8C2B5D0066F278 /* UIImage+TRColorBackdrop.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4955511A8C2B5D0066F278 /* UIImage+TRColorBackdrop.m */; }; 4D7389DF1A9890CD0039F13B /* UIScrollView+TRReactiveCocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7389DE1A9890CD0039F13B /* UIScrollView+TRReactiveCocoa.m */; }; 4D76CCD41A99C3FA00DDE5EB /* TRRefreshLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D76CCD31A99C3FA00DDE5EB /* TRRefreshLayer.m */; }; 4D7CDEBF1A46DD030038DD33 /* NSError+TRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7CDEBE1A46DD030038DD33 /* NSError+TRErrors.m */; }; - 4D98E9851A80C43F00856412 /* TRDailyForecastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D98E9841A80C43F00856412 /* TRDailyForecastView.m */; }; 4D9A00061A9D61CD000835A9 /* TRAnalyticsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D9A00051A9D61CD000835A9 /* TRAnalyticsController.m */; }; 4DC069CD1A95B8F800F3BCEB /* TRColorBackdropLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC069CC1A95B8F800F3BCEB /* TRColorBackdropLayer.m */; }; 4DC716601A9B1D5B00BC4BD4 /* TRRefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DC7165F1A9B1D5B00BC4BD4 /* TRRefreshControl.m */; }; @@ -241,6 +241,7 @@ 0B30A1610CAE1C2E302C28B0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 0F9A6CB121C996EC0035C811 /* CLLocation+TRRecentLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CLLocation+TRRecentLocation.swift"; sourceTree = ""; }; 0F9A6CB921CBF4C30035C811 /* LocationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationController.swift; sourceTree = ""; }; + 0FB1907A21E3D8E800A2A8CA /* DailyForecastView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DailyForecastView.swift; sourceTree = ""; }; 1CDD2312F1EF05277F045E15 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 22FE01C01AF3F5550085B494 /* Secrets.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Secrets.h; sourceTree = ""; }; 449386DA1B5044EE00766EC9 /* pl-PL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pl-PL"; path = "pl-PL.lproj/Localizable.strings"; sourceTree = ""; }; @@ -345,7 +346,7 @@ 4D115AF11ADC8C0C0032AAA3 /* SettingsTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsTableViewController.swift; sourceTree = ""; tabWidth = 2; }; 4D1ABA091A89686200B7F8FB /* TRNavigationBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRNavigationBar.h; sourceTree = ""; }; 4D1ABA0A1A89686200B7F8FB /* TRNavigationBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRNavigationBar.m; sourceTree = ""; }; - 4D3336F51A80BE16001BA9A8 /* TRDailyForecastView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TRDailyForecastView.xib; sourceTree = ""; }; + 4D3336F51A80BE16001BA9A8 /* DailyForecastView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DailyForecastView.xib; sourceTree = ""; }; 4D49554A1A8C298A0066F278 /* TRRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRRefreshView.h; sourceTree = ""; }; 4D49554B1A8C298A0066F278 /* TRRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRRefreshView.m; sourceTree = ""; }; 4D49554D1A8C29C30066F278 /* TRCircularProgressLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRCircularProgressLayer.h; sourceTree = ""; }; @@ -358,8 +359,6 @@ 4D76CCD31A99C3FA00DDE5EB /* TRRefreshLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRRefreshLayer.m; sourceTree = ""; }; 4D7CDEBD1A46DD030038DD33 /* NSError+TRErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError+TRErrors.h"; sourceTree = ""; }; 4D7CDEBE1A46DD030038DD33 /* NSError+TRErrors.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError+TRErrors.m"; sourceTree = ""; }; - 4D98E9831A80C43F00856412 /* TRDailyForecastView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRDailyForecastView.h; sourceTree = ""; }; - 4D98E9841A80C43F00856412 /* TRDailyForecastView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRDailyForecastView.m; sourceTree = ""; }; 4D9A00041A9D61CD000835A9 /* TRAnalyticsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRAnalyticsController.h; sourceTree = ""; }; 4D9A00051A9D61CD000835A9 /* TRAnalyticsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRAnalyticsController.m; sourceTree = ""; }; 4D9A000D1A9D7868000835A9 /* TRAnalyticsEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRAnalyticsEvent.h; sourceTree = ""; }; @@ -503,7 +502,7 @@ children = ( B6D58F8AA6976EA1B35682B7 /* LaunchScreen.xib */, 4D0A5C3C1A3A53DD0084C41E /* CWForecastDetailView.xib */, - 4D3336F51A80BE16001BA9A8 /* TRDailyForecastView.xib */, + 4D3336F51A80BE16001BA9A8 /* DailyForecastView.xib */, ); path = Nibs; sourceTree = ""; @@ -781,14 +780,13 @@ 639AAB142C96B59FC995CA1D /* Views */ = { isa = PBXGroup; children = ( + 0FB1907A21E3D8E800A2A8CA /* DailyForecastView.swift */, 51FEC99D21CD9F3300CDBC97 /* FadingImageView.swift */, 51FEC99921CD9AC500CDBC97 /* FadingLabel.swift */, 4D49554D1A8C29C30066F278 /* TRCircularProgressLayer.h */, 4D49554E1A8C29C30066F278 /* TRCircularProgressLayer.m */, 4DC069CB1A95B8F800F3BCEB /* TRColorBackdropLayer.h */, 4DC069CC1A95B8F800F3BCEB /* TRColorBackdropLayer.m */, - 4D98E9831A80C43F00856412 /* TRDailyForecastView.h */, - 4D98E9841A80C43F00856412 /* TRDailyForecastView.m */, 4D1ABA091A89686200B7F8FB /* TRNavigationBar.h */, 4D1ABA0A1A89686200B7F8FB /* TRNavigationBar.m */, 4DC7165E1A9B1D5B00BC4BD4 /* TRRefreshControl.h */, @@ -1139,7 +1137,7 @@ 4D0A5C3D1A3A53DD0084C41E /* CWForecastDetailView.xib in Resources */, CFC0721C2D9EFFD3C3AE11A7 /* Images.xcassets in Resources */, C2E44CE91A3A42C6009CC844 /* InfoPlist.strings in Resources */, - 4D3336F61A80BE16001BA9A8 /* TRDailyForecastView.xib in Resources */, + 4D3336F61A80BE16001BA9A8 /* DailyForecastView.xib in Resources */, C2E44CE41A3A4273009CC844 /* Localizable.strings in Resources */, 5DA50AD91A82CAB300CAE666 /* DINNextLTPro-Light.otf in Resources */, A12FCE2A1D338A4A0062E7F1 /* DINNextLTPro-Regular.otf in Resources */, @@ -1326,6 +1324,7 @@ buildActionMask = 2147483647; files = ( 4D49554F1A8C29C30066F278 /* TRCircularProgressLayer.m in Sources */, + 0FB1907B21E3D8E800A2A8CA /* DailyForecastView.swift in Sources */, 4D7389DF1A9890CD0039F13B /* UIScrollView+TRReactiveCocoa.m in Sources */, 4AA138C42134835A0083B816 /* Intents.intentdefinition in Sources */, 4DC069CD1A95B8F800F3BCEB /* TRColorBackdropLayer.m in Sources */, @@ -1353,7 +1352,6 @@ 51FEC99C21CD9E4A00CDBC97 /* CATransition.swift in Sources */, 4D7CDEBF1A46DD030038DD33 /* NSError+TRErrors.m in Sources */, E7A895541AFD11AA0023205B /* TRApplicationController.m in Sources */, - 4D98E9851A80C43F00856412 /* TRDailyForecastView.m in Sources */, 4D9A00061A9D61CD000835A9 /* TRAnalyticsController.m in Sources */, C2E44CE11A3A3C09009CC844 /* TRWeatherViewController.m in Sources */, 4D1ABA0B1A89686200B7F8FB /* TRNavigationBar.m in Sources */,