Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
contactos-app
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
Javier Heisecke
contactos-app
Commits
7abcdb34
Commit
7abcdb34
authored
Apr 08, 2020
by
Javier Heisekce
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/searchBar'
parents
e2c874c1
5c06c519
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
4 deletions
+54
-4
ContactsApp/Base.lproj/Main.storyboard
+13
-2
ContactsApp/ContactsViewController.swift
+41
-2
No files found.
ContactsApp/Base.lproj/Main.storyboard
View file @
7abcdb34
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
<subviews>
<subviews>
<tableView
clipsSubviews=
"YES"
contentMode=
"scaleToFill"
alwaysBounceVertical=
"YES"
dataMode=
"prototypes"
style=
"plain"
separatorStyle=
"default"
rowHeight=
"-1"
estimatedRowHeight=
"-1"
sectionHeaderHeight=
"28"
sectionFooterHeight=
"28"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"dBj-cU-Ugw"
>
<tableView
clipsSubviews=
"YES"
contentMode=
"scaleToFill"
alwaysBounceVertical=
"YES"
dataMode=
"prototypes"
style=
"plain"
separatorStyle=
"default"
rowHeight=
"-1"
estimatedRowHeight=
"-1"
sectionHeaderHeight=
"28"
sectionFooterHeight=
"28"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"dBj-cU-Ugw"
>
<rect
key=
"frame"
x=
"0.0"
y=
"
44"
width=
"375"
height=
"623
"
/>
<rect
key=
"frame"
x=
"0.0"
y=
"
100"
width=
"375"
height=
"567
"
/>
<color
key=
"backgroundColor"
systemColor=
"systemBackgroundColor"
cocoaTouchSystemColor=
"whiteColor"
/>
<color
key=
"backgroundColor"
systemColor=
"systemBackgroundColor"
cocoaTouchSystemColor=
"whiteColor"
/>
<prototypes>
<prototypes>
<tableViewCell
clipsSubviews=
"YES"
contentMode=
"scaleToFill"
preservesSuperviewLayoutMargins=
"YES"
selectionStyle=
"default"
indentationWidth=
"10"
reuseIdentifier=
"contactName"
id=
"QkB-8k-kbX"
>
<tableViewCell
clipsSubviews=
"YES"
contentMode=
"scaleToFill"
preservesSuperviewLayoutMargins=
"YES"
selectionStyle=
"default"
indentationWidth=
"10"
reuseIdentifier=
"contactName"
id=
"QkB-8k-kbX"
>
...
@@ -33,11 +33,21 @@
...
@@ -33,11 +33,21 @@
<outlet
property=
"delegate"
destination=
"l7R-c3-U8p"
id=
"pgD-yj-lEC"
/>
<outlet
property=
"delegate"
destination=
"l7R-c3-U8p"
id=
"pgD-yj-lEC"
/>
</connections>
</connections>
</tableView>
</tableView>
<searchBar
contentMode=
"redraw"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"2yO-jM-dTD"
>
<rect
key=
"frame"
x=
"0.0"
y=
"44"
width=
"375"
height=
"56"
/>
<textInputTraits
key=
"textInputTraits"
/>
<connections>
<outlet
property=
"delegate"
destination=
"U0h-dc-vbE"
id=
"LUn-MP-HEY"
/>
</connections>
</searchBar>
</subviews>
</subviews>
<color
key=
"backgroundColor"
systemColor=
"systemBackgroundColor"
cocoaTouchSystemColor=
"whiteColor"
/>
<color
key=
"backgroundColor"
systemColor=
"systemBackgroundColor"
cocoaTouchSystemColor=
"whiteColor"
/>
<constraints>
<constraints>
<constraint
firstItem=
"dBj-cU-Ugw"
firstAttribute=
"top"
secondItem=
"2yO-jM-dTD"
secondAttribute=
"bottom"
id=
"8nd-C7-lbC"
/>
<constraint
firstItem=
"ig1-pz-8Nn"
firstAttribute=
"trailing"
secondItem=
"dBj-cU-Ugw"
secondAttribute=
"trailing"
id=
"HCT-3z-lWu"
/>
<constraint
firstItem=
"ig1-pz-8Nn"
firstAttribute=
"trailing"
secondItem=
"dBj-cU-Ugw"
secondAttribute=
"trailing"
id=
"HCT-3z-lWu"
/>
<constraint
firstItem=
"dBj-cU-Ugw"
firstAttribute=
"top"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"top"
id=
"NqI-Ku-x9S"
/>
<constraint
firstItem=
"2yO-jM-dTD"
firstAttribute=
"top"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"top"
id=
"Id5-HP-nkN"
/>
<constraint
firstItem=
"2yO-jM-dTD"
firstAttribute=
"trailing"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"trailing"
id=
"b9K-lU-zTt"
/>
<constraint
firstItem=
"2yO-jM-dTD"
firstAttribute=
"leading"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"leading"
id=
"dOI-p7-1BY"
/>
<constraint
firstItem=
"dBj-cU-Ugw"
firstAttribute=
"leading"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"leading"
id=
"ecL-bI-50d"
/>
<constraint
firstItem=
"dBj-cU-Ugw"
firstAttribute=
"leading"
secondItem=
"ig1-pz-8Nn"
secondAttribute=
"leading"
id=
"ecL-bI-50d"
/>
<constraint
firstItem=
"ig1-pz-8Nn"
firstAttribute=
"bottom"
secondItem=
"dBj-cU-Ugw"
secondAttribute=
"bottom"
id=
"ydk-Ee-Ybk"
/>
<constraint
firstItem=
"ig1-pz-8Nn"
firstAttribute=
"bottom"
secondItem=
"dBj-cU-Ugw"
secondAttribute=
"bottom"
id=
"ydk-Ee-Ybk"
/>
</constraints>
</constraints>
...
@@ -46,6 +56,7 @@
...
@@ -46,6 +56,7 @@
<navigationItem
key=
"navigationItem"
id=
"U0h-dc-vbE"
/>
<navigationItem
key=
"navigationItem"
id=
"U0h-dc-vbE"
/>
<connections>
<connections>
<outlet
property=
"contactsTable"
destination=
"dBj-cU-Ugw"
id=
"8YS-LO-fy0"
/>
<outlet
property=
"contactsTable"
destination=
"dBj-cU-Ugw"
id=
"8YS-LO-fy0"
/>
<outlet
property=
"searchBar"
destination=
"2yO-jM-dTD"
id=
"4EW-JC-tfj"
/>
<segue
destination=
"i2T-MY-6qf"
kind=
"show"
identifier=
"gotocontact"
id=
"1Ts-QM-UT7"
/>
<segue
destination=
"i2T-MY-6qf"
kind=
"show"
identifier=
"gotocontact"
id=
"1Ts-QM-UT7"
/>
</connections>
</connections>
</viewController>
</viewController>
...
...
ContactsApp/ContactsViewController.swift
View file @
7abcdb34
...
@@ -11,8 +11,10 @@ import ContactsUI
...
@@ -11,8 +11,10 @@ import ContactsUI
class
ContactsViewController
:
UIViewController
{
class
ContactsViewController
:
UIViewController
{
@IBOutlet
weak
var
searchBar
:
UISearchBar
!
@IBOutlet
weak
var
contactsTable
:
UITableView
!
@IBOutlet
weak
var
contactsTable
:
UITableView
!
var
contactStructArray
=
[
ContactStruct
]()
var
contactStructArray
=
[
ContactStruct
]()
var
contactAux
=
[
ContactStruct
]()
var
contactStruct
:
ContactStruct
?
var
contactStruct
:
ContactStruct
?
let
contactStore
=
CNContactStore
()
let
contactStore
=
CNContactStore
()
...
@@ -20,11 +22,13 @@ class ContactsViewController: UIViewController {
...
@@ -20,11 +22,13 @@ class ContactsViewController: UIViewController {
super
.
viewDidLoad
()
super
.
viewDidLoad
()
contactsTable
.
register
(
UINib
(
nibName
:
"ContactSection"
,
bundle
:
nil
),
forHeaderFooterViewReuseIdentifier
:
"headerId"
)
contactsTable
.
register
(
UINib
(
nibName
:
"ContactSection"
,
bundle
:
nil
),
forHeaderFooterViewReuseIdentifier
:
"headerId"
)
importContacts
()
importContacts
()
searchBar
.
delegate
=
self
contactsTable
.
tableFooterView
=
UIView
(
frame
:
.
zero
)
contactsTable
.
tableFooterView
=
UIView
(
frame
:
.
zero
)
searchBar
.
placeholder
=
NSLocalizedString
(
"Nombre..."
,
comment
:
""
)
}
}
func
importContacts
()
{
func
importContacts
()
{
self
.
contactStructArray
=
[]
let
keys
=
[
CNContactFormatter
.
descriptorForRequiredKeys
(
for
:
.
fullName
),
CNContactEmailAddressesKey
,
CNContactPhoneNumbersKey
,
CNContactImageDataKey
]
as
[
Any
]
let
keys
=
[
CNContactFormatter
.
descriptorForRequiredKeys
(
for
:
.
fullName
),
CNContactEmailAddressesKey
,
CNContactPhoneNumbersKey
,
CNContactImageDataKey
]
as
[
Any
]
let
request
=
CNContactFetchRequest
(
keysToFetch
:
keys
as!
[
CNKeyDescriptor
])
let
request
=
CNContactFetchRequest
(
keysToFetch
:
keys
as!
[
CNKeyDescriptor
])
request
.
sortOrder
=
CNContactSortOrder
.
givenName
request
.
sortOrder
=
CNContactSortOrder
.
givenName
...
@@ -48,10 +52,10 @@ class ContactsViewController: UIViewController {
...
@@ -48,10 +52,10 @@ class ContactsViewController: UIViewController {
auxLetter
=
String
(
contact
.
givenName
.
prefix
(
1
))
//auxLetter tiene la primera letra del nombre
auxLetter
=
String
(
contact
.
givenName
.
prefix
(
1
))
//auxLetter tiene la primera letra del nombre
isNotTheFirst
=
true
//la siguiente vez que las letras no sean iguales guardara en el array
isNotTheFirst
=
true
//la siguiente vez que las letras no sean iguales guardara en el array
}
}
}
}
}
}
self
.
contactStructArray
.
append
(
ContactStruct
(
isExpanded
:
true
,
contacts
:
contacts
,
letter
:
auxLetter
))
//agregamos el ultimo nombre
self
.
contactStructArray
.
append
(
ContactStruct
(
isExpanded
:
true
,
contacts
:
contacts
,
letter
:
auxLetter
))
//agregamos el ultimo nombre
self
.
contactAux
=
self
.
contactStructArray
}
}
catch
{
catch
{
print
(
"unable to fetch contacts"
)
print
(
"unable to fetch contacts"
)
...
@@ -142,3 +146,38 @@ extension ContactsViewController: UITableViewDelegate, UITableViewDataSource {
...
@@ -142,3 +146,38 @@ extension ContactsViewController: UITableViewDelegate, UITableViewDataSource {
}
}
}
}
extension
ContactsViewController
:
UISearchBarDelegate
,
UISearchDisplayDelegate
,
UISearchResultsUpdating
{
func
updateSearchResults
(
for
searchController
:
UISearchController
)
{
}
func
searchBarCancelButtonClicked
(
_
searchBar
:
UISearchBar
)
{
contactStructArray
=
contactAux
}
func
searchBar
(
_
searchBar
:
UISearchBar
,
textDidChange
searchText
:
String
)
{
var
foundContacts
=
[
ContactStruct
]()
if
searchText
==
""
{
contactStructArray
=
contactAux
contactsTable
.
reloadData
()
}
else
{
for
indexContact
in
contactAux
.
indices
{
let
contactFound
=
contactAux
[
indexContact
]
.
contacts
.
filter
(
{
let
fullName
=
"
\(
$0
.
givenName
)
\(
$0
.
familyName
)
"
return
fullName
.
lowercased
()
.
contains
(
searchText
.
lowercased
())
}
)
if
!
contactFound
.
isEmpty
{
foundContacts
.
append
(
ContactStruct
(
isExpanded
:
true
,
contacts
:
contactFound
,
letter
:
contactAux
[
indexContact
]
.
letter
))
}
}
contactStructArray
=
foundContacts
contactsTable
.
reloadData
()
}
}
}
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