Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
Material
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitriy Stepanets
Material
Commits
787a893d
Commit
787a893d
authored
Feb 14, 2016
by
Daniel Dahan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
initial commit for SearchBarView
parent
a13df0f4
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
447 additions
and
71 deletions
+447
-71
Examples/Programmatic/MaterialSwitch/MaterialSwitch/ViewController.swift
+21
-12
Material.xcodeproj/project.pbxproj
+12
-0
Sources/MaterialSwitch.swift
+29
-18
Sources/NavigationBarView.swift
+178
-41
Sources/SearchBarView.swift
+207
-0
No files found.
Examples/Programmatic/MaterialSwitch/MaterialSwitch/ViewController.swift
View file @
787a893d
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
*/
*/
/*
/*
The following
is an example
of MaterialSwitch.
The following
are examples
of MaterialSwitch.
*/
*/
import
UIKit
import
UIKit
...
@@ -40,12 +40,12 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
...
@@ -40,12 +40,12 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
private
var
materialSwitch
:
MaterialSwitch
!
private
var
materialSwitch
:
MaterialSwitch
!
/// Reference for NavigationBarView.
/// Reference for NavigationBarView.
private
var
navigationBarView
:
NavigationBarView
=
Navigation
BarView
()
private
var
searchBarView
:
SearchBarView
=
Search
BarView
()
override
func
viewDidLoad
()
{
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
super
.
viewDidLoad
()
prepareView
()
prepareView
()
prepare
Navigation
BarView
()
prepare
Search
BarView
()
prepareSmallMaterialSwitch
()
prepareSmallMaterialSwitch
()
prepareNormalMaterialSwitch
()
prepareNormalMaterialSwitch
()
prepareLargeMaterialSwitch
()
prepareLargeMaterialSwitch
()
...
@@ -61,11 +61,13 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
...
@@ -61,11 +61,13 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
}
}
/// Prepare navigationBarView.
/// Prepare navigationBarView.
private
func
prepareNavigationBarView
()
{
private
func
prepareSearchBarView
()
{
navigationBarView
.
statusBarStyle
=
.
LightContent
searchBarView
.
statusBarStyle
=
.
LightContent
navigationBarView
.
backgroundColor
=
MaterialColor
.
blue
.
base
searchBarView
.
backgroundColor
=
MaterialColor
.
blue
.
base
searchBarView
.
textField
.
attributedPlaceholder
=
NSAttributedString
(
string
:
"Search"
,
attributes
:
[
NSForegroundColorAttributeName
:
MaterialColor
.
white
])
view
.
addSubview
(
navigationBarView
)
searchBarView
.
textField
.
clearButtonMode
=
.
WhileEditing
searchBarView
.
textField
.
tintColor
=
MaterialColor
.
white
view
.
addSubview
(
searchBarView
)
}
}
/// Prepares the Small MaterialSwitch.
/// Prepares the Small MaterialSwitch.
...
@@ -74,11 +76,15 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
...
@@ -74,11 +76,15 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
materialSwitch
.
delegate
=
self
materialSwitch
.
delegate
=
self
let
image
:
UIImage
?
=
UIImage
(
named
:
"ic_alarm_white"
)
let
image
:
UIImage
?
=
UIImage
(
named
:
"ic_alarm_white"
)
let
alarmButton
:
FlatButton
=
FlatButton
()
alarmButton
.
setImage
(
image
,
forState
:
.
Normal
)
alarmButton
.
setImage
(
image
,
forState
:
.
Highlighted
)
let
button
:
FlatButton
=
FlatButton
()
let
button
:
FlatButton
=
FlatButton
()
button
.
set
Image
(
image
,
forState
:
.
Normal
)
button
.
set
Title
(
"Back Button"
,
forState
:
.
Normal
)
button
.
setImage
(
image
,
forState
:
.
Highlighted
)
materialSwitch
.
backgroundColor
=
MaterialColor
.
green
.
base
searchBarView
.
leftControls
=
[
materialSwitch
]
navigationBarView
.
leftControls
=
[
materialSwitch
,
b
utton
]
searchBarView
.
rightControls
=
[
alarmB
utton
]
}
}
/// Prepares the Normal MaterialSwitch.
/// Prepares the Normal MaterialSwitch.
...
@@ -89,6 +95,9 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
...
@@ -89,6 +95,9 @@ class ViewController: UIViewController, MaterialSwitchDelegate {
materialSwitch
.
delegate
=
self
materialSwitch
.
delegate
=
self
materialSwitch
.
backgroundColor
=
MaterialColor
.
green
.
base
materialSwitch
.
backgroundColor
=
MaterialColor
.
green
.
base
view
.
addSubview
(
materialSwitch
)
view
.
addSubview
(
materialSwitch
)
materialSwitch
.
translatesAutoresizingMaskIntoConstraints
=
false
MaterialLayout
.
size
(
view
,
child
:
materialSwitch
,
width
:
materialSwitch
.
width
+
100
,
height
:
materialSwitch
.
height
+
100
)
MaterialLayout
.
alignFromBottomRight
(
view
,
child
:
materialSwitch
,
bottom
:
16
,
right
:
16
)
}
}
/// Prepares the Large MaterialSwitch.
/// Prepares the Large MaterialSwitch.
...
...
Material.xcodeproj/project.pbxproj
View file @
787a893d
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
96A71EBA1C6FCFA300C0C4AE
/* Menu.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
65FDC2EA1C66858A00103AC2
/* Menu.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96A71EBA1C6FCFA300C0C4AE
/* Menu.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
65FDC2EA1C66858A00103AC2
/* Menu.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96A71EBB1C6FCFA300C0C4AE
/* MenuView.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96A71E901C6FBC2200C0C4AE
/* MenuView.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96A71EBB1C6FCFA300C0C4AE
/* MenuView.swift in Headers */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96A71E901C6FBC2200C0C4AE
/* MenuView.swift */
;
settings
=
{
ATTRIBUTES
=
(
Public
,
);
};
};
96A71EC71C6FFF0500C0C4AE
/* MaterialSwitch.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96A71EC61C6FFF0500C0C4AE
/* MaterialSwitch.swift */
;
};
96A71EC71C6FFF0500C0C4AE
/* MaterialSwitch.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96A71EC61C6FFF0500C0C4AE
/* MaterialSwitch.swift */
;
};
96A71EF61C71127100C0C4AE
/* SearchBarView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96A71EF51C71127100C0C4AE
/* SearchBarView.swift */
;
};
96D88C1E1C1328D800B91418
/* CaptureView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF51C1328D800B91418
/* CaptureView.swift */
;
};
96D88C1E1C1328D800B91418
/* CaptureView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF51C1328D800B91418
/* CaptureView.swift */
;
};
96D88C1F1C1328D800B91418
/* CardView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF61C1328D800B91418
/* CardView.swift */
;
};
96D88C1F1C1328D800B91418
/* CardView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF61C1328D800B91418
/* CardView.swift */
;
};
96D88C201C1328D800B91418
/* CapturePreviewView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF71C1328D800B91418
/* CapturePreviewView.swift */
;
};
96D88C201C1328D800B91418
/* CapturePreviewView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
96D88BF71C1328D800B91418
/* CapturePreviewView.swift */
;
};
...
@@ -139,6 +140,7 @@
...
@@ -139,6 +140,7 @@
966F57B71C226D75009185B7
/* TextField.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
TextField.swift
;
sourceTree
=
"<group>"
;
};
966F57B71C226D75009185B7
/* TextField.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
TextField.swift
;
sourceTree
=
"<group>"
;
};
96A71E901C6FBC2200C0C4AE
/* MenuView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MenuView.swift
;
sourceTree
=
"<group>"
;
};
96A71E901C6FBC2200C0C4AE
/* MenuView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MenuView.swift
;
sourceTree
=
"<group>"
;
};
96A71EC61C6FFF0500C0C4AE
/* MaterialSwitch.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MaterialSwitch.swift
;
sourceTree
=
"<group>"
;
};
96A71EC61C6FFF0500C0C4AE
/* MaterialSwitch.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MaterialSwitch.swift
;
sourceTree
=
"<group>"
;
};
96A71EF51C71127100C0C4AE
/* SearchBarView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
SearchBarView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF51C1328D800B91418
/* CaptureView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CaptureView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF51C1328D800B91418
/* CaptureView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CaptureView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF61C1328D800B91418
/* CardView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CardView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF61C1328D800B91418
/* CardView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CardView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF71C1328D800B91418
/* CapturePreviewView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CapturePreviewView.swift
;
sourceTree
=
"<group>"
;
};
96D88BF71C1328D800B91418
/* CapturePreviewView.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
CapturePreviewView.swift
;
sourceTree
=
"<group>"
;
};
...
@@ -269,6 +271,14 @@
...
@@ -269,6 +271,14 @@
name
=
Switch
;
name
=
Switch
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
};
};
96A71EF71C71134200C0C4AE
/* Search */
=
{
isa
=
PBXGroup
;
children
=
(
96A71EF51C71127100C0C4AE
/* SearchBarView.swift */
,
);
name
=
Search
;
sourceTree
=
"<group>"
;
};
96D88BF41C1328D800B91418
/* Sources */
=
{
96D88BF41C1328D800B91418
/* Sources */
=
{
isa
=
PBXGroup
;
isa
=
PBXGroup
;
children
=
(
children
=
(
...
@@ -293,6 +303,7 @@
...
@@ -293,6 +303,7 @@
965C58BD1C6B8D3300CFB4E1
/* Grid */
,
965C58BD1C6B8D3300CFB4E1
/* Grid */
,
96A71E921C6FBC2900C0C4AE
/* Menu */
,
96A71E921C6FBC2900C0C4AE
/* Menu */
,
96A71EC51C6FFEF300C0C4AE
/* Switch */
,
96A71EC51C6FFEF300C0C4AE
/* Switch */
,
96A71EF71C71134200C0C4AE
/* Search */
,
);
);
path
=
Sources
;
path
=
Sources
;
sourceTree
=
"<group>"
;
sourceTree
=
"<group>"
;
...
@@ -603,6 +614,7 @@
...
@@ -603,6 +614,7 @@
960B23481C38480E00E96216
/* TextView.swift in Sources */
,
960B23481C38480E00E96216
/* TextView.swift in Sources */
,
96D88C291C1328D800B91418
/* MaterialBasicAnimation.swift in Sources */
,
96D88C291C1328D800B91418
/* MaterialBasicAnimation.swift in Sources */
,
96D88C3A1C1328D800B91418
/* MaterialTextLayer.swift in Sources */
,
96D88C3A1C1328D800B91418
/* MaterialTextLayer.swift in Sources */
,
96A71EF61C71127100C0C4AE
/* SearchBarView.swift in Sources */
,
96D88C371C1328D800B91418
/* MaterialRadius.swift in Sources */
,
96D88C371C1328D800B91418
/* MaterialRadius.swift in Sources */
,
960B232F1C383EAA00E96216
/* Material+UIImage+Crop.swift in Sources */
,
960B232F1C383EAA00E96216
/* Material+UIImage+Crop.swift in Sources */
,
96D88C241C1328D800B91418
/* ImageCardView.swift in Sources */
,
96D88C241C1328D800B91418
/* ImageCardView.swift in Sources */
,
...
...
Sources/MaterialSwitch.swift
View file @
787a893d
...
@@ -216,24 +216,13 @@ public class MaterialSwitch: UIControl {
...
@@ -216,24 +216,13 @@ public class MaterialSwitch: UIControl {
public
override
var
frame
:
CGRect
{
public
override
var
frame
:
CGRect
{
didSet
{
didSet
{
var
w
:
CGFloat
=
0
layoutSwitch
()
switch
switchSize
{
}
case
.
Small
:
}
w
=
30
case
.
Normal
:
public
override
var
bounds
:
CGRect
{
w
=
40
didSet
{
case
.
Large
:
layoutSwitch
()
w
=
50
}
let
px
:
CGFloat
=
(
width
-
w
)
/
2
track
.
frame
=
CGRectMake
(
px
,
(
height
-
trackThickness
)
/
2
,
w
,
trackThickness
)
track
.
cornerRadius
=
min
(
track
.
height
,
track
.
width
)
/
2
button
.
frame
=
CGRectMake
(
px
,
(
height
-
buttonDiameter
)
/
2
,
buttonDiameter
,
buttonDiameter
)
onPosition
=
width
-
px
-
buttonDiameter
offPosition
=
px
}
}
}
}
...
@@ -458,4 +447,26 @@ public class MaterialSwitch: UIControl {
...
@@ -458,4 +447,26 @@ public class MaterialSwitch: UIControl {
track
.
backgroundColor
=
trackOffDisabledColor
track
.
backgroundColor
=
trackOffDisabledColor
}
}
}
}
/// Laout the button and track views.
private
func
layoutSwitch
()
{
var
w
:
CGFloat
=
0
switch
switchSize
{
case
.
Small
:
w
=
30
case
.
Normal
:
w
=
40
case
.
Large
:
w
=
50
}
let
px
:
CGFloat
=
(
width
-
w
)
/
2
track
.
frame
=
CGRectMake
(
px
,
(
height
-
trackThickness
)
/
2
,
w
,
trackThickness
)
track
.
cornerRadius
=
min
(
track
.
height
,
track
.
width
)
/
2
button
.
frame
=
CGRectMake
(
px
,
(
height
-
buttonDiameter
)
/
2
,
buttonDiameter
,
buttonDiameter
)
onPosition
=
width
-
px
-
buttonDiameter
offPosition
=
px
}
}
}
Sources/NavigationBarView.swift
View file @
787a893d
...
@@ -52,7 +52,25 @@ public class NavigationBarView : MaterialView {
...
@@ -52,7 +52,25 @@ public class NavigationBarView : MaterialView {
/**
/**
:name: contentInset
:name: contentInset
*/
*/
public
var
contentInset
:
UIEdgeInsets
=
UIEdgeInsets
(
top
:
24
,
left
:
8
,
bottom
:
8
,
right
:
8
)
{
public
var
contentInset
:
UIEdgeInsets
=
MaterialEdgeInsetToValue
(
.
Square2
)
{
didSet
{
reloadView
()
}
}
/**
:name: titleLabelInsets
*/
public
var
titleLabelInsetPreset
:
MaterialEdgeInset
=
.
None
{
didSet
{
titleLabelInset
=
MaterialEdgeInsetToValue
(
titleLabelInsetPreset
)
}
}
/**
:name: titleLabelInset
*/
public
var
titleLabelInset
:
UIEdgeInsets
=
UIEdgeInsets
(
top
:
12
,
left
:
0
,
bottom
:
0
,
right
:
0
)
{
didSet
{
didSet
{
reloadView
()
reloadView
()
}
}
...
@@ -69,6 +87,24 @@ public class NavigationBarView : MaterialView {
...
@@ -69,6 +87,24 @@ public class NavigationBarView : MaterialView {
}
}
/**
/**
:name: detailLabelInsets
*/
public
var
detailLabelInsetPreset
:
MaterialEdgeInset
=
.
None
{
didSet
{
detailLabelInset
=
MaterialEdgeInsetToValue
(
detailLabelInsetPreset
)
}
}
/**
:name: detailLabelInset
*/
public
var
detailLabelInset
:
UIEdgeInsets
=
MaterialEdgeInsetToValue
(
.
None
)
{
didSet
{
reloadView
()
}
}
/**
:name: detailLabel
:name: detailLabel
*/
*/
public
var
detailLabel
:
UILabel
?
{
public
var
detailLabel
:
UILabel
?
{
...
@@ -79,13 +115,31 @@ public class NavigationBarView : MaterialView {
...
@@ -79,13 +115,31 @@ public class NavigationBarView : MaterialView {
}
}
/**
/**
:name: leftControls
:name: leftButtonsInsets
*/
public
var
leftButtonsInsetPreset
:
MaterialEdgeInset
=
.
None
{
didSet
{
leftButtonsInset
=
MaterialEdgeInsetToValue
(
leftButtonsInsetPreset
)
}
}
/**
:name: leftButtonsInset
*/
public
var
leftButtonsInset
:
UIEdgeInsets
=
UIEdgeInsets
(
top
:
8
,
left
:
0
,
bottom
:
0
,
right
:
0
)
{
didSet
{
reloadView
()
}
}
/**
:name: leftButtons
*/
*/
public
var
left
Controls
:
Array
<
UIControl
>
?
{
public
var
left
Buttons
:
Array
<
UIButton
>
?
{
didSet
{
didSet
{
if
let
v
=
left
Control
s
{
if
let
v
=
left
Button
s
{
for
c
in
v
{
for
b
in
v
{
// c
.translatesAutoresizingMaskIntoConstraints = false
b
.
translatesAutoresizingMaskIntoConstraints
=
false
}
}
}
}
reloadView
()
reloadView
()
...
@@ -93,13 +147,31 @@ public class NavigationBarView : MaterialView {
...
@@ -93,13 +147,31 @@ public class NavigationBarView : MaterialView {
}
}
/**
/**
:name: right
Control
s
:name: right
ButtonsInset
s
*/
*/
public
var
right
Controls
:
Array
<
UIControl
>
?
{
public
var
right
ButtonsInsetPreset
:
MaterialEdgeInset
=
.
None
{
didSet
{
didSet
{
if
let
v
:
Array
<
UIControl
>
=
rightControls
{
rightButtonsInset
=
MaterialEdgeInsetToValue
(
rightButtonsInsetPreset
)
for
c
in
v
{
}
c
.
translatesAutoresizingMaskIntoConstraints
=
false
}
/**
:name: rightButtonsInset
*/
public
var
rightButtonsInset
:
UIEdgeInsets
=
UIEdgeInsets
(
top
:
8
,
left
:
0
,
bottom
:
0
,
right
:
0
)
{
didSet
{
reloadView
()
}
}
/**
:name: rightButtons
*/
public
var
rightButtons
:
Array
<
UIButton
>
?
{
didSet
{
if
let
v
=
rightButtons
{
for
b
in
v
{
b
.
translatesAutoresizingMaskIntoConstraints
=
false
}
}
}
}
reloadView
()
reloadView
()
...
@@ -130,9 +202,9 @@ public class NavigationBarView : MaterialView {
...
@@ -130,9 +202,9 @@ public class NavigationBarView : MaterialView {
/**
/**
:name: init
:name: init
*/
*/
public
convenience
init
?(
titleLabel
:
UILabel
?
=
nil
,
detailLabel
:
UILabel
?
=
nil
,
left
Controls
:
Array
<
UIControl
>
?
=
nil
,
rightControls
:
Array
<
UIControl
>
?
=
nil
)
{
public
convenience
init
?(
titleLabel
:
UILabel
?
=
nil
,
detailLabel
:
UILabel
?
=
nil
,
left
Buttons
:
Array
<
UIButton
>
?
=
nil
,
rightButtons
:
Array
<
UIButton
>
?
=
nil
)
{
self
.
init
(
frame
:
CGRectMake
(
0
,
0
,
UIScreen
.
mainScreen
()
.
bounds
.
width
,
70
))
self
.
init
(
frame
:
CGRectMake
(
0
,
0
,
UIScreen
.
mainScreen
()
.
bounds
.
width
,
70
))
prepareProperties
(
titleLabel
,
detailLabel
:
detailLabel
,
left
Controls
:
leftControls
,
rightControls
:
rightControl
s
)
prepareProperties
(
titleLabel
,
detailLabel
:
detailLabel
,
left
Buttons
:
leftButtons
,
rightButtons
:
rightButton
s
)
}
}
/**
/**
...
@@ -145,49 +217,114 @@ public class NavigationBarView : MaterialView {
...
@@ -145,49 +217,114 @@ public class NavigationBarView : MaterialView {
v
.
removeFromSuperview
()
v
.
removeFromSuperview
()
}
}
var
verticalFormat
:
String
=
"V:|"
var
views
:
Dictionary
<
String
,
AnyObject
>
=
Dictionary
<
String
,
AnyObject
>
()
var
metrics
:
Dictionary
<
String
,
AnyObject
>
=
Dictionary
<
String
,
AnyObject
>
()
if
nil
!=
titleLabel
{
verticalFormat
+=
"-(insetTop)"
metrics
[
"insetTop"
]
=
contentInset
.
top
+
titleLabelInset
.
top
}
else
if
nil
!=
detailLabel
{
verticalFormat
+=
"-(insetTop)"
metrics
[
"insetTop"
]
=
contentInset
.
top
+
detailLabelInset
.
top
}
var
views
:
Dictionary
<
String
,
UIView
>
=
Dictionary
<
String
,
UIView
>
()
// title
var
h
:
String
=
"H:|"
if
let
v
=
titleLabel
{
verticalFormat
+=
"-[titleLabel]"
views
[
"titleLabel"
]
=
v
addSubview
(
v
)
MaterialLayout
.
alignToParentHorizontally
(
self
,
child
:
v
,
left
:
contentInset
.
left
+
titleLabelInset
.
left
,
right
:
contentInset
.
right
+
titleLabelInset
.
right
)
}
// detail
if
let
v
=
detailLabel
{
if
nil
!=
titleLabel
{
verticalFormat
+=
"-(insetB)"
metrics
[
"insetB"
]
=
titleLabelInset
.
bottom
+
detailLabelInset
.
top
}
verticalFormat
+=
"-[detailLabel]"
views
[
"detailLabel"
]
=
v
addSubview
(
v
)
MaterialLayout
.
alignToParentHorizontally
(
self
,
child
:
v
,
left
:
contentInset
.
left
+
detailLabelInset
.
left
,
right
:
contentInset
.
right
+
detailLabelInset
.
right
)
}
// left
Control
s
// left
Button
s
if
let
v
:
Array
<
UIControl
>
=
leftControl
s
{
if
let
v
=
leftButton
s
{
if
0
<
v
.
count
{
if
0
<
v
.
count
{
var
h
:
String
=
"H:|"
var
d
:
Dictionary
<
String
,
AnyObject
>
=
Dictionary
<
String
,
AnyObject
>
()
var
i
:
Int
=
0
var
i
:
Int
=
0
for
c
in
v
{
for
b
in
v
{
let
k
:
String
=
"
c
\(
i
)
"
let
k
:
String
=
"
b
\(
i
)
"
views
[
k
]
=
c
d
[
k
]
=
b
if
0
==
i
++
{
if
0
==
i
++
{
h
+=
"-(left)-"
h
+=
"-(left)-"
}
else
{
}
else
{
h
+=
"-(
spacing
)-"
h
+=
"-(
left_right
)-"
}
}
h
+=
"[
\(
k
)
]"
h
+=
"[
\(
k
)
]"
addSubview
(
c
)
c
.
grid
.
columns
=
1
// if 0 < c.bounds.width {
addSubview
(
b
)
// MaterialLayout.size(self, child: c, width: c.bounds.width, height: c.bounds.height)
MaterialLayout
.
alignFromBottom
(
self
,
child
:
b
,
bottom
:
contentInset
.
bottom
+
leftButtonsInset
.
bottom
)
// }
if
let
btn
:
UIButton
=
c
as?
UIButton
{
btn
.
contentEdgeInsets
=
UIEdgeInsetsZero
}
// MaterialLayout.alignToParentVertically(self, child: c, top: contentInset.top, bottom: contentInset.bottom)
}
}
addConstraints
(
MaterialLayout
.
constraint
(
h
,
options
:
[],
metrics
:
[
"left"
:
contentInset
.
left
+
leftButtonsInset
.
left
,
"left_right"
:
leftButtonsInset
.
left
+
leftButtonsInset
.
right
],
views
:
d
))
}
}
}
}
grid
.
contentInset
.
top
=
20
// rightButtons
grid
.
contentInset
.
bottom
=
10
if
let
v
=
rightButtons
{
grid
.
columns
=
10
if
0
<
v
.
count
{
grid
.
views
=
leftControls
var
h
:
String
=
"H:"
var
d
:
Dictionary
<
String
,
AnyObject
>
=
Dictionary
<
String
,
AnyObject
>
()
var
i
:
Int
=
v
.
count
-
1
for
b
in
v
{
let
k
:
String
=
"b
\(
i
)
"
d
[
k
]
=
b
h
+=
"[
\(
k
)
]"
if
0
==
i
--
{
h
+=
"-(right)-"
}
else
{
h
+=
"-(right_left)-"
}
addSubview
(
b
)
MaterialLayout
.
alignFromBottom
(
self
,
child
:
b
,
bottom
:
contentInset
.
bottom
+
rightButtonsInset
.
bottom
)
}
addConstraints
(
MaterialLayout
.
constraint
(
h
+
"|"
,
options
:
[],
metrics
:
[
"right"
:
contentInset
.
right
+
rightButtonsInset
.
right
,
"right_left"
:
rightButtonsInset
.
right
+
rightButtonsInset
.
left
],
views
:
d
))
}
}
if
nil
!=
detailLabel
{
if
nil
==
metrics
[
"insetC"
]
{
metrics
[
"insetBottom"
]
=
contentInset
.
bottom
+
detailLabelInset
.
bottom
}
else
{
metrics
[
"insetC"
]
=
(
metrics
[
"insetC"
]
as!
CGFloat
)
+
detailLabelInset
.
bottom
}
}
else
if
nil
!=
titleLabel
{
if
nil
==
metrics
[
"insetC"
]
{
metrics
[
"insetBottom"
]
=
contentInset
.
bottom
+
titleLabelInset
.
bottom
}
else
{
metrics
[
"insetC"
]
=
(
metrics
[
"insetC"
]
as!
CGFloat
)
+
titleLabelInset
.
bottom
}
}
// addConstraints(MaterialLayout.constraint(h + "|", options: [], metrics: ["left" : contentInset.left, "spacing" : 8], views: views))
if
0
<
views
.
count
{
verticalFormat
+=
"-(insetBottom)-|"
addConstraints
(
MaterialLayout
.
constraint
(
verticalFormat
,
options
:
[],
metrics
:
metrics
,
views
:
views
))
}
}
}
/**
/**
...
@@ -201,10 +338,10 @@ public class NavigationBarView : MaterialView {
...
@@ -201,10 +338,10 @@ public class NavigationBarView : MaterialView {
/**
/**
:name: prepareProperties
:name: prepareProperties
*/
*/
internal
func
prepareProperties
(
titleLabel
:
UILabel
?,
detailLabel
:
UILabel
?,
left
Controls
:
Array
<
UIControl
>
?,
rightControls
:
Array
<
UIControl
>
?)
{
internal
func
prepareProperties
(
titleLabel
:
UILabel
?,
detailLabel
:
UILabel
?,
left
Buttons
:
Array
<
UIButton
>
?,
rightButtons
:
Array
<
UIButton
>
?)
{
self
.
titleLabel
=
titleLabel
self
.
titleLabel
=
titleLabel
self
.
detailLabel
=
detailLabel
self
.
detailLabel
=
detailLabel
self
.
left
Controls
=
leftControl
s
self
.
left
Buttons
=
leftButton
s
self
.
right
Controls
=
rightControl
s
self
.
right
Buttons
=
rightButton
s
}
}
}
}
Sources/SearchBarView.swift
0 → 100644
View file @
787a893d
/*
* Copyright (C) 2015 - 2016, Daniel Dahan and CosmicMind, Inc. <http://cosmicmind.io>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of Material nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import
UIKit
public
class
SearchBarView
:
MaterialView
{
/**
:name: statusBarStyle
*/
public
var
statusBarStyle
:
UIStatusBarStyle
=
UIApplication
.
sharedApplication
()
.
statusBarStyle
{
didSet
{
UIApplication
.
sharedApplication
()
.
statusBarStyle
=
statusBarStyle
}
}
/// Wrapper around grid.contentInset.
public
var
contentInset
:
UIEdgeInsets
=
UIEdgeInsetsZero
{
didSet
{
grid
.
contentInset
=
contentInset
}
}
/// Wrapper around grid.spacing.
public
var
spacing
:
CGFloat
=
0
{
didSet
{
grid
.
spacing
=
spacing
}
}
/// SearchBar textField.
public
private(set)
lazy
var
textField
:
TextField
=
TextField
()
/**
:name: leftControls
*/
public
var
leftControls
:
Array
<
UIControl
>
?
{
didSet
{
reloadView
()
}
}
/**
:name: rightControls
*/
public
var
rightControls
:
Array
<
UIControl
>
?
{
didSet
{
reloadView
()
}
}
/**
:name: init
*/
public
required
init
?(
coder
aDecoder
:
NSCoder
)
{
super
.
init
(
coder
:
aDecoder
)
}
/**
:name: init
*/
public
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
}
/**
:name: init
*/
public
convenience
init
()
{
self
.
init
(
frame
:
CGRectMake
(
0
,
0
,
UIScreen
.
mainScreen
()
.
bounds
.
width
,
70
))
}
/**
:name: init
*/
public
convenience
init
?(
leftControls
:
Array
<
UIControl
>
?
=
nil
,
rightControls
:
Array
<
UIControl
>
?
=
nil
)
{
self
.
init
(
frame
:
CGRectMake
(
0
,
0
,
UIScreen
.
mainScreen
()
.
bounds
.
width
,
70
))
prepareProperties
(
leftControls
,
rightControls
:
rightControls
)
}
public
override
func
didMoveToSuperview
()
{
super
.
didMoveToSuperview
()
reloadView
()
}
/**
:name: reloadView
*/
public
func
reloadView
()
{
// clear constraints so new ones do not conflict
removeConstraints
(
constraints
)
for
v
in
subviews
{
v
.
removeFromSuperview
()
}
grid
.
views
=
[]
textField
.
grid
.
columns
=
grid
.
columns
// leftControls
if
let
v
:
Array
<
UIControl
>
=
leftControls
{
if
0
<
v
.
count
{
// Size of single grid column.
let
g
:
CGFloat
=
width
/
CGFloat
(
grid
.
columns
)
for
c
in
v
{
var
w
:
CGFloat
=
c
.
frame
.
width
if
0
==
w
{
if
let
b
:
UIButton
=
c
as?
UIButton
{
b
.
contentEdgeInsets
=
UIEdgeInsetsZero
}
w
=
c
.
intrinsicContentSize
()
.
width
}
c
.
grid
.
columns
=
Int
(
ceil
(
w
/
g
))
textField
.
grid
.
columns
-=
c
.
grid
.
columns
addSubview
(
c
)
grid
.
views
?
.
append
(
c
)
}
}
}
addSubview
(
textField
)
grid
.
views
?
.
append
(
textField
)
// rightControls
if
let
v
:
Array
<
UIControl
>
=
rightControls
{
if
0
<
v
.
count
{
// Size of single grid column.
let
g
:
CGFloat
=
width
/
CGFloat
(
grid
.
columns
)
for
c
in
v
{
var
w
:
CGFloat
=
c
.
frame
.
width
if
0
==
w
{
if
let
b
:
UIButton
=
c
as?
UIButton
{
b
.
contentEdgeInsets
=
UIEdgeInsetsZero
}
w
=
c
.
intrinsicContentSize
()
.
width
}
c
.
grid
.
columns
=
Int
(
ceil
(
w
/
g
))
textField
.
grid
.
columns
-=
c
.
grid
.
columns
addSubview
(
c
)
grid
.
views
?
.
append
(
c
)
}
}
}
grid
.
reloadLayout
()
}
/**
:name: prepareView
*/
public
override
func
prepareView
()
{
super
.
prepareView
()
grid
.
columns
=
10
grid
.
spacing
=
8
grid
.
contentInset
.
top
=
28
grid
.
contentInset
.
left
=
8
grid
.
contentInset
.
bottom
=
8
grid
.
contentInset
.
right
=
8
depth
=
.
Depth1
prepareTextField
()
}
/**
:name: prepareProperties
*/
private
func
prepareProperties
(
leftControls
:
Array
<
UIControl
>
?,
rightControls
:
Array
<
UIControl
>
?)
{
self
.
leftControls
=
leftControls
self
.
rightControls
=
rightControls
}
private
func
prepareTextField
()
{
textField
.
backgroundColor
=
MaterialColor
.
clear
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment