Skip to content

Commit f1e98c1

Browse files
committed
Promote viewFromNib to public API
1 parent 06234fe commit f1e98c1

7 files changed

+53
-48
lines changed

SwiftMessages.xcodeproj/project.pbxproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
867E21851D4D044F00594A41 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E21841D4D044F00594A41 /* Configuration.swift */; };
2222
867E21871D4D04C600594A41 /* MessageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 867E21861D4D04C600594A41 /* MessageView.xib */; };
2323
867E21891D4D06D900594A41 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 867E21881D4D06D900594A41 /* Images.xcassets */; };
24-
867E21901D4D3E5E00594A41 /* UIView+Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E218F1D4D3E5E00594A41 /* UIView+Message.swift */; };
24+
867E21901D4D3E5E00594A41 /* UIView+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E218F1D4D3E5E00594A41 /* UIView+Utils.swift */; };
2525
867E21941D4D50BB00594A41 /* Presenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867E21931D4D50BB00594A41 /* Presenter.swift */; };
2626
86AAF8181D54F0650031EE32 /* PassthroughView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF8171D54F0650031EE32 /* PassthroughView.swift */; };
2727
86AAF81A1D54F0850031EE32 /* PassthroughWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */; };
@@ -68,7 +68,7 @@
6868
867E21841D4D044F00594A41 /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = "<group>"; };
6969
867E21861D4D04C600594A41 /* MessageView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MessageView.xib; sourceTree = "<group>"; };
7070
867E21881D4D06D900594A41 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
71-
867E218F1D4D3E5E00594A41 /* UIView+Message.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Message.swift"; sourceTree = "<group>"; };
71+
867E218F1D4D3E5E00594A41 /* UIView+Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+Utils.swift"; sourceTree = "<group>"; };
7272
867E21931D4D50BB00594A41 /* Presenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Presenter.swift; sourceTree = "<group>"; };
7373
86AAF8171D54F0650031EE32 /* PassthroughView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassthroughView.swift; sourceTree = "<group>"; };
7474
86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassthroughWindow.swift; sourceTree = "<group>"; };
@@ -107,6 +107,7 @@
107107
children = (
108108
864495551D4F7C390056EB2A /* Identifiable.swift */,
109109
86AAF81D1D5549680031EE32 /* MarginAdjustable.swift */,
110+
867E218F1D4D3E5E00594A41 /* UIView+Utils.swift */,
110111
);
111112
name = Base;
112113
sourceTree = "<group>";
@@ -193,7 +194,6 @@
193194
86AAF8171D54F0650031EE32 /* PassthroughView.swift */,
194195
86AAF8191D54F0850031EE32 /* PassthroughWindow.swift */,
195196
8644955C1D4FAF7C0056EB2A /* WindowViewController.swift */,
196-
867E218F1D4D3E5E00594A41 /* UIView+Message.swift */,
197197
86AAF81B1D551FE60031EE32 /* UIViewController+Utils.swift */,
198198
);
199199
name = Internal;
@@ -343,7 +343,7 @@
343343
867E21941D4D50BB00594A41 /* Presenter.swift in Sources */,
344344
8644955D1D4FAF7C0056EB2A /* WindowViewController.swift in Sources */,
345345
867E21531D4D01D500594A41 /* AppDelegate.swift in Sources */,
346-
867E21901D4D3E5E00594A41 /* UIView+Message.swift in Sources */,
346+
867E21901D4D3E5E00594A41 /* UIView+Utils.swift in Sources */,
347347
86AAF81E1D5549680031EE32 /* MarginAdjustable.swift in Sources */,
348348
86AAF81C1D551FE70031EE32 /* UIViewController+Utils.swift in Sources */,
349349
);

SwiftMessages/Configuration.swift

+1-2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public enum Icon {
6767
}
6868

6969
enum Error: ErrorType {
70+
case CannotLoadNib(nibName: String)
7071
case CannotLoadViewFromNib(nibName: String)
7172
case NoRootViewController
7273
}
@@ -75,8 +76,6 @@ public struct Configuration {
7576

7677
public var duration = Duration.Automatic
7778

78-
public var nibName: String?
79-
8079
public var presentationStyle = PresentationStyle.Top
8180

8281
public var presentationContext = PresentationContext.Automatic

SwiftMessages/GalleryTableViewController.swift

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class GalleryTableViewController: UITableViewController {
1919
config.preferredStatusBarStyle = .LightContent
2020
// config.presentationContext = .Automatic
2121
config.presentationStyle = .Top
22-
config.nibName = "StatusLine"
2322
Manager.sharedManager.add(configuration: config, view: view)
2423
}
2524
}

SwiftMessages/Manager.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ public class Manager {
5959
}
6060
}
6161

62+
public var pauseBetweenMessages: NSTimeInterval = 0.5
63+
6264
let syncQueue = dispatch_queue_create("it.swiftkick.SwiftMessage.Manager", DISPATCH_QUEUE_SERIAL)
6365
var queue: [Presenter] = []
6466
var current: Presenter? = nil {
6567
didSet {
6668
if oldValue != nil {
67-
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
69+
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(pauseBetweenMessages * Double(NSEC_PER_SEC)))
6870
dispatch_after(delayTime, syncQueue, { [weak self] in
6971
guard let strongSelf = self else { return }
7072
strongSelf.dequeueNext()

SwiftMessages/MessageView.swift

+8-12
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,6 @@ public class MessageView: UIView, Identifiable, MarginAdjustable {
1919
@IBOutlet public var iconImage: UIImageView?
2020
@IBOutlet public var iconLabel: UILabel?
2121
@IBOutlet public var button: UIButton?
22-
23-
/*
24-
MARK: - Setting content
25-
*/
26-
27-
func setIcon(icon: Icon?) {
28-
iconImage?.image = icon?.image
29-
iconLabel?.text = icon?.text
30-
}
3122

3223
/*
3324
MARK: - Creating message views
@@ -43,7 +34,7 @@ public class MessageView: UIView, Identifiable, MarginAdjustable {
4334
}
4435

4536
/*
46-
MARK: - Style configurations
37+
MARK: - Configuring the theme
4738
*/
4839

4940
public func configureErrorTheme() {
@@ -56,7 +47,7 @@ public class MessageView: UIView, Identifiable, MarginAdjustable {
5647
}
5748

5849
/*
59-
MARK: - Content configurations
50+
MARK: - Configuring the content
6051
*/
6152

6253
public func configureContent(body body: String) {
@@ -84,8 +75,13 @@ public class MessageView: UIView, Identifiable, MarginAdjustable {
8475
button?.setTitle(buttonTitle, forState: .Normal)
8576
}
8677
// TODO set button tap handler
87-
}
78+
}
8879

80+
func setIcon(icon: Icon?) {
81+
iconImage?.image = icon?.image
82+
iconLabel?.text = icon?.text
83+
}
84+
8985
/*
9086
MARK: - Initialization
9187
*/

SwiftMessages/UIView+Message.swift

-28
This file was deleted.

SwiftMessages/UIView+Utils.swift

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// UIView+Utils.swift
3+
// SwiftMessages
4+
//
5+
// Created by Tim Moose on 7/30/16.
6+
// Copyright © 2016 SwiftKick Mobile. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
extension UIView {
12+
13+
public class func viewFromNib<T>() throws -> T {
14+
let name = description().componentsSeparatedByString(".").last
15+
assert(name != nil)
16+
let view: T = try viewFromNib(named: name!)
17+
return view
18+
}
19+
20+
public class func viewFromNib<T>(named name: String) throws -> T {
21+
do {
22+
let view: T = try viewFromNib(named: name, bundle: NSBundle.mainBundle())
23+
return view
24+
} catch {
25+
let view: T = try viewFromNib(named: name, bundle: NSBundle.init(forClass: Manager.self))
26+
return view
27+
}
28+
}
29+
30+
public class func viewFromNib<T>(named name: String, bundle: NSBundle) throws -> T {
31+
guard let arrayOfViews = NSBundle.mainBundle().loadNibNamed(name, owner: self, options: nil) else { throw Error.CannotLoadNib(nibName: name) }
32+
guard let view = arrayOfViews.first as? T else { throw Error.CannotLoadViewFromNib(nibName: name) }
33+
return view
34+
}
35+
}
36+
37+

0 commit comments

Comments
 (0)