Commit 7e33b382 by Daniel Dahan

master: updated for release 1.8.0

parents c316eea6 f6894a40
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'MK' s.name = 'MK'
s.version = '1.7.0' s.version = '1.8.0'
s.license = { :type => "AGPLv3+", :file => "LICENSE" } s.license = { :type => "AGPLv3+", :file => "LICENSE" }
s.summary = 'A Material Design Framework In Swift' s.summary = 'A Material Design Framework In Swift'
s.homepage = 'http://materialkit.io' s.homepage = 'http://materialkit.io'
......
...@@ -68,7 +68,7 @@ Easily make cards with fully customizable components. ...@@ -68,7 +68,7 @@ Easily make cards with fully customizable components.
```swift ```swift
var card: BasicCard = BasicCard() var card: BasicCardView = BasicCardView()
// title // title
card.titleLabel = UILabel() card.titleLabel = UILabel()
...@@ -109,7 +109,7 @@ Add photos with an Image Card. ...@@ -109,7 +109,7 @@ Add photos with an Image Card.
```swift ```swift
var card: ImageCard = ImageCard() var card: ImageCardView = ImageCardView()
card.imageView = UIImageView(image: UIImage(named: "photo.jpg")) card.imageView = UIImageView(image: UIImage(named: "photo.jpg"))
// layout // layout
...@@ -127,7 +127,7 @@ Allow the Image Card to really shine by adding a title, some details, and button ...@@ -127,7 +127,7 @@ Allow the Image Card to really shine by adding a title, some details, and button
```swift ```swift
var card: ImageCard = ImageCard() var card: ImageCardView = ImageCardView()
card.imageView = UIImageView(image: UIImage(named: "photo.jpg")) card.imageView = UIImageView(image: UIImage(named: "photo.jpg"))
// title // title
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
import UIKit import UIKit
public class BasicCard : MaterialCard, Comparable, Equatable { public class BasicCardView : MaterialCardView, Comparable, Equatable {
// //
// :name: layoutConstraints // :name: layoutConstraints
// //
...@@ -277,22 +277,22 @@ public class BasicCard : MaterialCard, Comparable, Equatable { ...@@ -277,22 +277,22 @@ public class BasicCard : MaterialCard, Comparable, Equatable {
} }
} }
public func ==(lhs: BasicCard, rhs: BasicCard) -> Bool { public func ==(lhs: BasicCardView, rhs: BasicCardView) -> Bool {
return lhs.tag == rhs.tag return lhs.tag == rhs.tag
} }
public func <=(lhs: BasicCard, rhs: BasicCard) -> Bool { public func <=(lhs: BasicCardView, rhs: BasicCardView) -> Bool {
return lhs.tag <= rhs.tag return lhs.tag <= rhs.tag
} }
public func >=(lhs: BasicCard, rhs: BasicCard) -> Bool { public func >=(lhs: BasicCardView, rhs: BasicCardView) -> Bool {
return lhs.tag >= rhs.tag return lhs.tag >= rhs.tag
} }
public func >(lhs: BasicCard, rhs: BasicCard) -> Bool { public func >(lhs: BasicCardView, rhs: BasicCardView) -> Bool {
return lhs.tag > rhs.tag return lhs.tag > rhs.tag
} }
public func <(lhs: BasicCard, rhs: BasicCard) -> Bool { public func <(lhs: BasicCardView, rhs: BasicCardView) -> Bool {
return lhs.tag < rhs.tag return lhs.tag < rhs.tag
} }
...@@ -26,6 +26,7 @@ public class FabButton : MaterialButton { ...@@ -26,6 +26,7 @@ public class FabButton : MaterialButton {
super.prepareView() super.prepareView()
setTitleColor(MaterialTheme.white.color, forState: .Normal) setTitleColor(MaterialTheme.white.color, forState: .Normal)
backgroundColor = MaterialTheme.red.darken1 backgroundColor = MaterialTheme.red.darken1
pulseColor = MaterialTheme.white.color
contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0) contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0)
} }
......
...@@ -24,8 +24,7 @@ public class FlatButton : MaterialButton { ...@@ -24,8 +24,7 @@ public class FlatButton : MaterialButton {
// //
internal override func prepareView() { internal override func prepareView() {
super.prepareView() super.prepareView()
setTitleColor(MaterialTheme.indigo.darken1, forState: .Normal) setTitleColor(MaterialTheme.blue.accent2, forState: .Normal)
pulseColor = MaterialTheme.indigo.darken1
backgroundColor = MaterialTheme.clear.color backgroundColor = MaterialTheme.clear.color
contentEdgeInsets = UIEdgeInsetsMake(4, 16, 4, 16) contentEdgeInsets = UIEdgeInsetsMake(4, 16, 4, 16)
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
import UIKit import UIKit
public class ImageCard : MaterialCard, Comparable, Equatable { public class ImageCardView : MaterialCardView, Comparable, Equatable {
// //
// :name: layoutConstraints // :name: layoutConstraints
// //
...@@ -351,22 +351,22 @@ public class ImageCard : MaterialCard, Comparable, Equatable { ...@@ -351,22 +351,22 @@ public class ImageCard : MaterialCard, Comparable, Equatable {
} }
} }
public func ==(lhs: ImageCard, rhs: ImageCard) -> Bool { public func ==(lhs: ImageCardView, rhs: ImageCardView) -> Bool {
return lhs.tag == rhs.tag return lhs.tag == rhs.tag
} }
public func <=(lhs: ImageCard, rhs: ImageCard) -> Bool { public func <=(lhs: ImageCardView, rhs: ImageCardView) -> Bool {
return lhs.tag <= rhs.tag return lhs.tag <= rhs.tag
} }
public func >=(lhs: ImageCard, rhs: ImageCard) -> Bool { public func >=(lhs: ImageCardView, rhs: ImageCardView) -> Bool {
return lhs.tag >= rhs.tag return lhs.tag >= rhs.tag
} }
public func >(lhs: ImageCard, rhs: ImageCard) -> Bool { public func >(lhs: ImageCardView, rhs: ImageCardView) -> Bool {
return lhs.tag > rhs.tag return lhs.tag > rhs.tag
} }
public func <(lhs: ImageCard, rhs: ImageCard) -> Bool { public func <(lhs: ImageCardView, rhs: ImageCardView) -> Bool {
return lhs.tag < rhs.tag return lhs.tag < rhs.tag
} }
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.7.0</string> <string>1.8.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
import UIKit import UIKit
public class MaterialCard : UIView { public class MaterialCardView : UIView {
// //
// :name: backgroundColorView // :name: backgroundColorView
// //
......
...@@ -18,14 +18,14 @@ ...@@ -18,14 +18,14 @@
import UIKit import UIKit
@objc(TextDelegate) @objc(MaterialTextDelegate)
public protocol TextDelegate { public protocol TextDelegate {
optional func textStorageWillProcessEdit(text: Text, textStorage: TextStorage, string: String, range: NSRange) optional func textStorageWillProcessEdit(text: MaterialText, textStorage: MaterialTextStorage, string: String, range: NSRange)
optional func textStorageDidProcessEdit(text: Text, textStorage: TextStorage, string: String, result: NSTextCheckingResult, flags: NSMatchingFlags, stop: UnsafeMutablePointer<ObjCBool>) optional func textStorageDidProcessEdit(text: MaterialText, textStorage: MaterialTextStorage, string: String, result: NSTextCheckingResult, flags: NSMatchingFlags, stop: UnsafeMutablePointer<ObjCBool>)
} }
@objc(Text) @objc(MaterialText)
public class Text: NSObject { public class MaterialText: NSObject {
/** /**
:name: searchPattern :name: searchPattern
:description: A string representation of the regular expression that matches text within :description: A string representation of the regular expression that matches text within
...@@ -42,7 +42,7 @@ public class Text: NSObject { ...@@ -42,7 +42,7 @@ public class Text: NSObject {
:name: textStorage :name: textStorage
:description: Reference to wrapped NSTextStorage :description: Reference to wrapped NSTextStorage
*/ */
public let textStorage: TextStorage public let textStorage: MaterialTextStorage
/** /**
:name: delegate :name: delegate
...@@ -53,14 +53,14 @@ public class Text: NSObject { ...@@ -53,14 +53,14 @@ public class Text: NSObject {
/** /**
:name: init :name: init
*/ */
override public init() { public override init() {
textStorage = TextStorage() textStorage = MaterialTextStorage()
super.init() super.init()
textStorage.searchExpression = NSRegularExpression(pattern: searchPattern, options: nil, error: nil) textStorage.searchExpression = NSRegularExpression(pattern: searchPattern, options: nil, error: nil)
textStorage.textStorageWillProcessEdit = { (textStorage: TextStorage, string: String, range: NSRange) -> Void in textStorage.textStorageWillProcessEdit = { (textStorage: MaterialTextStorage, string: String, range: NSRange) -> Void in
self.delegate?.textStorageWillProcessEdit?(self, textStorage: textStorage, string: string, range: range) self.delegate?.textStorageWillProcessEdit?(self, textStorage: textStorage, string: string, range: range)
} }
textStorage.textStorageDidProcessEdit = { (textStorage: TextStorage, result: NSTextCheckingResult, flags: NSMatchingFlags, stop: UnsafeMutablePointer<ObjCBool>) -> Void in textStorage.textStorageDidProcessEdit = { (textStorage: MaterialTextStorage, result: NSTextCheckingResult, flags: NSMatchingFlags, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
self.delegate?.textStorageDidProcessEdit?(self, textStorage: textStorage, string: textStorage.string, result: result, flags: flags, stop: stop) self.delegate?.textStorageDidProcessEdit?(self, textStorage: textStorage, string: textStorage.string, result: result, flags: flags, stop: stop)
} }
} }
......
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
import UIKit import UIKit
internal typealias TextStorageWillProcessEdit = (TextStorage, String, NSRange) -> Void internal typealias MaterialTextStorageWillProcessEdit = (MaterialTextStorage, String, NSRange) -> Void
internal typealias TextStorageDidProcessEdit = (TextStorage, NSTextCheckingResult, NSMatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Void internal typealias MaterialTextStorageDidProcessEdit = (MaterialTextStorage, NSTextCheckingResult, NSMatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Void
public class TextStorage: NSTextStorage { public class MaterialTextStorage: NSTextStorage {
/** /**
:name: store :name: store
:description: Acts as the model, storing the string value. :description: Acts as the model, storing the string value.
...@@ -39,14 +39,14 @@ public class TextStorage: NSTextStorage { ...@@ -39,14 +39,14 @@ public class TextStorage: NSTextStorage {
:description: If set, this block callback executes when there is a change in the TextStorage :description: If set, this block callback executes when there is a change in the TextStorage
string value. string value.
*/ */
internal var textStorageWillProcessEdit: TextStorageWillProcessEdit? internal var textStorageWillProcessEdit: MaterialTextStorageWillProcessEdit?
/** /**
:name: textStorageDidProcessEdit :name: textStorageDidProcessEdit
:description: If set, this block callback executes when a match is detected after a change in :description: If set, this block callback executes when a match is detected after a change in
the TextStorage string value. the TextStorage string value.
*/ */
internal var textStorageDidProcessEdit: TextStorageDidProcessEdit? internal var textStorageDidProcessEdit: MaterialTextStorageDidProcessEdit?
required public init(coder aDecoder: NSCoder) { required public init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) super.init(coder: aDecoder)
......
...@@ -25,7 +25,7 @@ public class RaisedButton : MaterialButton { ...@@ -25,7 +25,7 @@ public class RaisedButton : MaterialButton {
internal override func prepareView() { internal override func prepareView() {
super.prepareView() super.prepareView()
setTitleColor(MaterialTheme.white.color, forState: .Normal) setTitleColor(MaterialTheme.white.color, forState: .Normal)
backgroundColor = MaterialTheme.indigo.darken1 backgroundColor = MaterialTheme.blue.accent2
contentEdgeInsets = UIEdgeInsetsMake(4, 16, 4, 16) contentEdgeInsets = UIEdgeInsetsMake(4, 16, 4, 16)
} }
......
...@@ -20,23 +20,22 @@ import UIKit ...@@ -20,23 +20,22 @@ import UIKit
public class TextView: UITextView { public class TextView: UITextView {
// //
// :name: label // :name: layoutConstraints
// :description: Placeholder label.
// //
private lazy var label: UILabel = UILabel() internal lazy var layoutConstraints: Array<NSLayoutConstraint> = Array<NSLayoutConstraint>()
// /**
// :name: labelConstraints :name: init
// :description: Autoresize constraints for the placeholder label. */
// public required init(coder aDecoder: NSCoder) {
private var labelConstraints: Array<NSLayoutConstraint>?
required public init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) super.init(coder: aDecoder)
prepareView() prepareView()
} }
override public init(frame: CGRect, textContainer: NSTextContainer?) { /**
:name: init
*/
public override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer) super.init(frame: frame, textContainer: textContainer)
if CGRectZero == frame { if CGRectZero == frame {
setTranslatesAutoresizingMaskIntoConstraints(false) setTranslatesAutoresizingMaskIntoConstraints(false)
...@@ -56,47 +55,27 @@ public class TextView: UITextView { ...@@ -56,47 +55,27 @@ public class TextView: UITextView {
:name: placeholder :name: placeholder
:description: The placeholder label string. :description: The placeholder label string.
*/ */
public var placeholder: String = "" { public var placeholderLabel: UILabel? {
didSet { didSet {
label.text = placeholder if let p = placeholderLabel {
p.setTranslatesAutoresizingMaskIntoConstraints(false)
p.font = font
p.textAlignment = textAlignment
p.numberOfLines = 0
p.backgroundColor = MaterialTheme.clear.color
addSubview(p)
updateLabelConstraints()
textViewTextDidChange()
}
} }
} }
/**
:name: placeholderColor
:description: The placeholder color.
*/
public var placeholderColor: UIColor = MaterialTheme.blueGrey.lighten1 {
didSet {
label.textColor = placeholderColor
}
}
/**
:name: font
:description: Font to use for placeholder based on UITextView font.
*/
override public var font: UIFont! {
didSet {
label.font = font
}
}
/**
:name: textAlignment
:description: Sets placeholder textAlignment based on UITextView textAlignment.
*/
override public var textAlignment: NSTextAlignment {
didSet {
label.textAlignment = textAlignment
}
}
/** /**
:name: text :name: text
:description: When set, updates the placeholder text. :description: When set, updates the placeholder text.
*/ */
override public var text: String! { public override var text: String! {
didSet { didSet {
textViewTextDidChange() textViewTextDidChange()
} }
...@@ -106,7 +85,7 @@ public class TextView: UITextView { ...@@ -106,7 +85,7 @@ public class TextView: UITextView {
:name: attributedText :name: attributedText
:description: When set, updates the placeholder attributedText. :description: When set, updates the placeholder attributedText.
*/ */
override public var attributedText: NSAttributedString! { public override var attributedText: NSAttributedString! {
didSet { didSet {
textViewTextDidChange() textViewTextDidChange()
} }
...@@ -116,15 +95,15 @@ public class TextView: UITextView { ...@@ -116,15 +95,15 @@ public class TextView: UITextView {
:name: textContainerInset :name: textContainerInset
:description: When set, updates the placeholder constraints. :description: When set, updates the placeholder constraints.
*/ */
override public var textContainerInset: UIEdgeInsets { public override var textContainerInset: UIEdgeInsets {
didSet { didSet {
updateLabelConstraints() updateLabelConstraints()
} }
} }
override public func layoutSubviews() { public override func layoutSubviews() {
super.layoutSubviews() super.layoutSubviews()
label.preferredMaxLayoutWidth = textContainer.size.width - textContainer.lineFragmentPadding * 2 placeholderLabel?.preferredMaxLayoutWidth = textContainer.size.width - textContainer.lineFragmentPadding * 2
} }
// //
...@@ -132,7 +111,9 @@ public class TextView: UITextView { ...@@ -132,7 +111,9 @@ public class TextView: UITextView {
// :description: Updates the label visibility when text is empty or not. // :description: Updates the label visibility when text is empty or not.
// //
internal func textViewTextDidChange() { internal func textViewTextDidChange() {
label.hidden = !text.isEmpty if let p = placeholderLabel {
p.hidden = !text.isEmpty
}
} }
// //
...@@ -140,21 +121,10 @@ public class TextView: UITextView { ...@@ -140,21 +121,10 @@ public class TextView: UITextView {
// :description: Sets up the common initilized values. // :description: Sets up the common initilized values.
// //
private func prepareView() { private func prepareView() {
backgroundColor = MaterialTheme.clear.color
textColor = MaterialTheme.black.color
label.font = font
label.textColor = placeholderColor
label.textAlignment = textAlignment
label.text = placeholder
label.numberOfLines = 0
label.backgroundColor = MaterialTheme.clear.color
label.setTranslatesAutoresizingMaskIntoConstraints(false)
addSubview(label)
// label needs to be added to the view // label needs to be added to the view
// hierarchy before setting insets // hierarchy before setting insets
textContainerInset = UIEdgeInsetsMake(16, 16, 16, 16) textContainerInset = UIEdgeInsetsMake(16, 16, 16, 16)
backgroundColor = MaterialTheme.clear.color
NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewTextDidChange", name: UITextViewTextDidChangeNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: "textViewTextDidChange", name: UITextViewTextDidChangeNotification, object: nil)
updateLabelConstraints() updateLabelConstraints()
} }
...@@ -164,15 +134,27 @@ public class TextView: UITextView { ...@@ -164,15 +134,27 @@ public class TextView: UITextView {
// :description: Updates the placeholder constraints. // :description: Updates the placeholder constraints.
// //
private func updateLabelConstraints() { private func updateLabelConstraints() {
if nil != labelConstraints { if let p = placeholderLabel {
removeConstraints(labelConstraints!) NSLayoutConstraint.deactivateConstraints(layoutConstraints)
layoutConstraints = Layout.constraint("H:|-(left)-[placeholderLabel]-(right)-|",
options: nil,
metrics: [
"left": textContainerInset.left + textContainer.lineFragmentPadding,
"right": textContainerInset.right + textContainer.lineFragmentPadding
], views: [
"placeholderLabel": p
])
layoutConstraints += Layout.constraint("V:|-(top)-[placeholderLabel]-(>=bottom)-|",
options: nil,
metrics: [
"top": textContainerInset.top,
"bottom": textContainerInset.bottom
],
views: [
"placeholderLabel": p
])
NSLayoutConstraint.activateConstraints(layoutConstraints)
} }
var constraints: Array<NSLayoutConstraint> = NSLayoutConstraint.constraintsWithVisualFormat("H:|-(left)-[placeholder]-(right)-|", options: nil, metrics: ["left": textContainerInset.left + textContainer.lineFragmentPadding, "right": textContainerInset.right + textContainer.lineFragmentPadding], views: ["placeholder": label]) as! Array<NSLayoutConstraint>
constraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-(top)-[placeholder]-(>=bottom)-|", options: nil, metrics: ["top": textContainerInset.top, "bottom": textContainerInset.bottom], views: ["placeholder": label]) as! Array<NSLayoutConstraint>
labelConstraints = constraints
addConstraints(constraints)
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment