From 909b95665ee232516ce4861fad75c741118a27c7 Mon Sep 17 00:00:00 2001 From: mriddle Date: Tue, 3 May 2016 11:52:10 +1000 Subject: [PATCH] Checklist icons --- AllListsViewController.swift | 1 + Checklists.xcodeproj/project.pbxproj | 4 + .../Appointments.imageset/Appointments@2x.png | Bin 0 -> 1756 bytes .../Appointments.imageset/Appointments@3x.png | Bin 0 -> 2905 bytes .../Appointments.imageset/Contents.json | 18 +++++ .../Birthdays.imageset/Birthdays@2x.png | Bin 0 -> 813 bytes .../Birthdays.imageset/Birthdays@3x.png | Bin 0 -> 1382 bytes .../Birthdays.imageset/Contents.json | 18 +++++ .../Chores.imageset/Chores@2x.png | Bin 0 -> 704 bytes .../Chores.imageset/Chores@3x.png | Bin 0 -> 1182 bytes .../Chores.imageset/Contents.json | 18 +++++ Checklists/Assets.xcassets/Contents.json | 6 ++ .../Drinks.imageset/Contents.json | 18 +++++ .../Drinks.imageset/Drinks@2x.png | Bin 0 -> 1612 bytes .../Drinks.imageset/Drinks@3x.png | Bin 0 -> 2584 bytes .../Folder.imageset/Contents.json | 18 +++++ .../Folder.imageset/Folder@2x.png | Bin 0 -> 691 bytes .../Folder.imageset/Folder@3x.png | Bin 0 -> 1065 bytes .../Groceries.imageset/Contents.json | 18 +++++ .../Groceries.imageset/Groceries@2x.png | Bin 0 -> 945 bytes .../Groceries.imageset/Groceries@3x.png | Bin 0 -> 1401 bytes .../Inbox.imageset/Contents.json | 18 +++++ .../Inbox.imageset/Inbox@2x.png | Bin 0 -> 913 bytes .../Inbox.imageset/Inbox@3x.png | Bin 0 -> 1610 bytes .../No Icon.imageset/Contents.json | 18 +++++ .../No Icon.imageset/No Icon@2x.png | Bin 0 -> 189 bytes .../No Icon.imageset/No Icon@3x.png | Bin 0 -> 274 bytes .../Photos.imageset/Contents.json | 18 +++++ .../Photos.imageset/Photos@2x.png | Bin 0 -> 1116 bytes .../Photos.imageset/Photos@3x.png | Bin 0 -> 1928 bytes .../Trips.imageset/Contents.json | 18 +++++ .../Trips.imageset/Trips@2x.png | Bin 0 -> 1196 bytes .../Trips.imageset/Trips@3x.png | Bin 0 -> 1840 bytes Checklists/Base.lproj/Main.storyboard | 73 ++++++++++++++++++ Checklists/Checklist.swift | 6 +- Checklists/DataModel.swift | 2 +- Checklists/ListDetailViewController.swift | 29 ++++++- IconPikerViewController.swift | 43 +++++++++++ 38 files changed, 339 insertions(+), 5 deletions(-) create mode 100644 Checklists/Assets.xcassets/Appointments.imageset/Appointments@2x.png create mode 100644 Checklists/Assets.xcassets/Appointments.imageset/Appointments@3x.png create mode 100644 Checklists/Assets.xcassets/Appointments.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@2x.png create mode 100644 Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@3x.png create mode 100644 Checklists/Assets.xcassets/Birthdays.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Chores.imageset/Chores@2x.png create mode 100644 Checklists/Assets.xcassets/Chores.imageset/Chores@3x.png create mode 100644 Checklists/Assets.xcassets/Chores.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Contents.json create mode 100644 Checklists/Assets.xcassets/Drinks.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Drinks.imageset/Drinks@2x.png create mode 100644 Checklists/Assets.xcassets/Drinks.imageset/Drinks@3x.png create mode 100644 Checklists/Assets.xcassets/Folder.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Folder.imageset/Folder@2x.png create mode 100644 Checklists/Assets.xcassets/Folder.imageset/Folder@3x.png create mode 100644 Checklists/Assets.xcassets/Groceries.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Groceries.imageset/Groceries@2x.png create mode 100644 Checklists/Assets.xcassets/Groceries.imageset/Groceries@3x.png create mode 100644 Checklists/Assets.xcassets/Inbox.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Inbox.imageset/Inbox@2x.png create mode 100644 Checklists/Assets.xcassets/Inbox.imageset/Inbox@3x.png create mode 100644 Checklists/Assets.xcassets/No Icon.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/No Icon.imageset/No Icon@2x.png create mode 100644 Checklists/Assets.xcassets/No Icon.imageset/No Icon@3x.png create mode 100644 Checklists/Assets.xcassets/Photos.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Photos.imageset/Photos@2x.png create mode 100644 Checklists/Assets.xcassets/Photos.imageset/Photos@3x.png create mode 100644 Checklists/Assets.xcassets/Trips.imageset/Contents.json create mode 100644 Checklists/Assets.xcassets/Trips.imageset/Trips@2x.png create mode 100644 Checklists/Assets.xcassets/Trips.imageset/Trips@3x.png create mode 100644 IconPikerViewController.swift diff --git a/AllListsViewController.swift b/AllListsViewController.swift index cc22ed7..ee6aead 100644 --- a/AllListsViewController.swift +++ b/AllListsViewController.swift @@ -50,6 +50,7 @@ class AllListsViewController: UITableViewController, ListDetailViewControllerDel cell.detailTextLabel!.text = "\(checklist.countUncheckedItems()) Remaining" } + cell.imageView!.image = UIImage(named: checklist.iconName) return cell } diff --git a/Checklists.xcodeproj/project.pbxproj b/Checklists.xcodeproj/project.pbxproj index 10902ec..a4bd4a1 100644 --- a/Checklists.xcodeproj/project.pbxproj +++ b/Checklists.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ A8961D4F1CD19E87006AFAF4 /* ItemDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8961D4E1CD19E87006AFAF4 /* ItemDetailViewController.swift */; }; A8961D541CD309B0006AFAF4 /* AllListsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8961D531CD309B0006AFAF4 /* AllListsViewController.swift */; }; A8961D561CD31108006AFAF4 /* Checklist.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8961D551CD31108006AFAF4 /* Checklist.swift */; }; + A8F92F251CD7302D005009A6 /* IconPikerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F92F241CD7302D005009A6 /* IconPikerViewController.swift */; }; A8FAB6981CD6CB75007E7222 /* ListDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8FAB6971CD6CB75007E7222 /* ListDetailViewController.swift */; }; /* End PBXBuildFile section */ @@ -33,6 +34,7 @@ A8961D4E1CD19E87006AFAF4 /* ItemDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ItemDetailViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; A8961D531CD309B0006AFAF4 /* AllListsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AllListsViewController.swift; path = ../AllListsViewController.swift; sourceTree = ""; }; A8961D551CD31108006AFAF4 /* Checklist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checklist.swift; sourceTree = ""; }; + A8F92F241CD7302D005009A6 /* IconPikerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IconPikerViewController.swift; path = ../IconPikerViewController.swift; sourceTree = ""; }; A8FAB6971CD6CB75007E7222 /* ListDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListDetailViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -67,6 +69,7 @@ isa = PBXGroup; children = ( A8961D531CD309B0006AFAF4 /* AllListsViewController.swift */, + A8F92F241CD7302D005009A6 /* IconPikerViewController.swift */, A81172C41CD0660E00BA3196 /* AppDelegate.swift */, A83B303B1CD6ECF800D38D88 /* DataModel.swift */, A81172C61CD0660E00BA3196 /* ChecklistViewController.swift */, @@ -158,6 +161,7 @@ A8FAB6981CD6CB75007E7222 /* ListDetailViewController.swift in Sources */, A8961D4F1CD19E87006AFAF4 /* ItemDetailViewController.swift in Sources */, A8961D561CD31108006AFAF4 /* Checklist.swift in Sources */, + A8F92F251CD7302D005009A6 /* IconPikerViewController.swift in Sources */, A81172D91CD0859800BA3196 /* ChecklistItem.swift in Sources */, A83B303C1CD6ECF800D38D88 /* DataModel.swift in Sources */, A8961D541CD309B0006AFAF4 /* AllListsViewController.swift in Sources */, diff --git a/Checklists/Assets.xcassets/Appointments.imageset/Appointments@2x.png b/Checklists/Assets.xcassets/Appointments.imageset/Appointments@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8075117757fab0e79ed70a3f87964efa54356213 GIT binary patch literal 1756 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 Du*ipV literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Appointments.imageset/Contents.json b/Checklists/Assets.xcassets/Appointments.imageset/Contents.json new file mode 100644 index 0000000..49d0668 --- /dev/null +++ b/Checklists/Assets.xcassets/Appointments.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Appointments@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Appointments@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@2x.png b/Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6cf24a1939e9703bfbd56e38074bdabf8c4b3e62 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n9h5;IEGZ*dV9;aqc>3I_{aCA`f*O0vnDy7YMIh|Lu<(m zP3a?XzR9YZ+^NdTHYSRBnQfLzb(+#T)k)KJ;`Wbb`e$b(_I#W*^Y}CK(p__RzPq~j z@yy?U{N_Hhd;WCi`JZ<_&-q_GuT90XV4juqK?gQ3{R=*xY^#hG9Con(!2E(qihD~e zU&*Ss?hh;`tWH}Xrogz5;qI?LQV~L#yDc&<>n>oi2t4bM-@4iB_;b@2uPcp}mv3Up zxco6F!6P7)`wN={XJ2-MbyG&)nJv{0xdC=8U&4$p`10Dsl!tM>wca2X!Ck}b);yDK zgH!GLGa(D+h+Qm~^58GvixA&pxpJ3nW$kxX<7fNqP(D zX3Tb55XPGzQo&Gj=_5-4^9{C~@SCkC_-lPjISWjK>OD)N8+;F>Cd8yBAJBfVx=()@ zZwBKB@7K=Fr(QKSA6T65;QW{G%mLz@FOv_XCq%}@@*1qzSKj>D_FDOs)puGhI`*XJ3##aE$4>{i^I2UXP`&aC~{m6kQtaGxZtsZ|@4Nyo<#F z3$Lt+v{}+I{glD|CF+k|wqIG4c_Zs=*cKlV3A1pOGt&)CGkQH5zIVk<^^$H<_#hGy z{EjzoY1y-_2Q+o*xlH;XT`);n*|&Hi)L6fTTHIp zA+g}(G12<|&?n#jOn+@Sp^+y=fm!l|1Dnx=MlZHgpTd$C+&KFxfvvEr`|cXQ>sS0v z>x$X#Z}ejA+T(RrCg9@xCAVJGg*{bBNkH2KBQDsimlUxzw faE?vO>OW&|s-Q^bTEXMM^v~ew>gTe~DWM4fAD(Ez literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@3x.png b/Checklists/Assets.xcassets/Birthdays.imageset/Birthdays@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..50c67a8d5608ca518d82c7e34f3a955b37d28298 GIT binary patch literal 1382 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 ZvL813Vqr1n@bmxx002ovPDHLkV1nA0Afx~Q literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Folder.imageset/Folder@3x.png b/Checklists/Assets.xcassets/Folder.imageset/Folder@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b93d492c1ce743dc5aa20516221d3c225c3bfa3d GIT binary patch literal 1065 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%%?qF978H@y_tJ9?{a`Z>tqeB0H*F~Q@lPf?csWVY10$I zgvfbX+8W;9-YRW}%DJItF9j{b>980c#_RIagdhZlhY4zf&=W_FRoU7P=Ff^)v!Qv*xyw;YN@wpCd%Wvxf9X8=>K~`P zyiV-iqQ~6vWcBGkraa;7t_S&|#9nW#TlSUb;3>=ES=&y!UkPmZUNuEN`?1V_pje~@ z@9!&zs{g%_sW%KccN}4)^fPjHzYBaL z^!ce~VROO@x$Z4D%R3vS=k1gG`!_}W%?wN1y1?VA_bmGTUo5xGx7{nwy{$-Y|HApt zcG&j4<`ApC!Y=J+)9tDgafFNeR7|nTruJ4*oy;t&XJ3q8c*G=G?K;2lnOvEd{aMSa zC7s8=7_V5{KZ~pF<%^EB_r?Fo_02nUg8f(Kx#r97o!6VGUeCW{>Hn!~-Ymo7Up4#l z4X4&Vs&T$0$P(BWv90~>xu70*iNk{Cf;~1Hz1y4>Br206Tr88WPVCsquN-m7#o*JC z56Xorw;qz{EbAybvZ`95a*^yJnT@Nwk6dft_;up6gc*H&H-2r(=&~{7`Tw*dE|;a8 zN5Ox~QUmudoN7Pci+*y6K4Q5jh5z>4l@k2XhXu1a+~!G~D_8-fGET>2y?ou{vS#nv zgwD1E@AH$J|9Qk@aZEE1YM$9Q^_v_}N%rfju}a(Sm9@IwYD%=q`M%-OM2*g6Cxmk~ z&j{|l#qr+GYhFh4Y~_2NVw1o4Sv=|d)}}n^Pg97&CzooVU0h-t51rv{UzK2}eqJr) zl;G<=pk=)Yoy!t{DuLe81o~$0%ZN-aw|O^=qy0g|`BbKF)iW|wycVx~Q&#Y#^H)W& z%Y3uRT>gJ5&c>9@1pmg{=KDc>DNjBR!xeP`k=UW z^`g%k)RYZ>YyX&W?faIx%g>Lc*#4RL{mZGOR>y=R_jv*zu70CvP*abTl`xpRGwqpp a7&xYu_07L>W+E`}GkCiCxvXR literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Groceries.imageset/Contents.json b/Checklists/Assets.xcassets/Groceries.imageset/Contents.json new file mode 100644 index 0000000..529d189 --- /dev/null +++ b/Checklists/Assets.xcassets/Groceries.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Groceries@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Groceries@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/Groceries.imageset/Groceries@2x.png b/Checklists/Assets.xcassets/Groceries.imageset/Groceries@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4249ba6aa21b8da458e1e2a220e7969bcbbd5886 GIT binary patch literal 945 zcmV;i15W&jP)f+D3!l?td35|;u5p&)^XODGVJ#g@K}e0#UHXV(s~cSib@ zyR~;_{oOqLSViP{p0QMmV1k&Sb`vCoAoZt?_fjH1^ka#U8h-^w=+jycdM|Ou()B=M zi8|g?2r334Dx&01-SI|6kRjg`gXl>7HM9$AUP^_a4-&U6x2ryP$%$Jv#sW){J~AZf zBU6$#+DwEXCEFllL%X(tYumQcUxidc>?*uuPGUjg8?IlI_#*LJ;)cX2HN;Yx2dzrX zOYCXnWca*?w$(a{Qz2-eg;`lPOMPgPKn@a^1gZ|pGuoHYc3>*=DJSWN76NPp8f~T! zVtxGG(k6uEN#YhhueC7;4NAEt^O=WYFY``i+%OGDzRa&<{k3Z#CqvsV`mVPr#9YFw zQJBRXVjYB+3bXsz6f?;^iG76Eg0=;c>|%8V6>6Wr@jKkJ(uOksgb-eZydZ~J#2)k# z-awh#tl^&5sjuc2B|b^~KzaY^sA3-F{)*b4miU}%neSr>u|psyL*E_T+fTX74{GF} zTID{*5Stk$1eprY)XIF3XkRtpdLqH6R_0BcWB$v1gdQ}SHQ6J|#3VDdGG9FKoW5Kj zN(Vat);w%(B)&P}ORAp9;h33Z#;H&_&Rm~jk(UR8(*4Z#OxnPFxc!-)+99TSkXkk0 z4D2|ESY=1)LFHd9^mi8za>bj9gznXY%D-CZ?=!uq?#I31WhnASQ@% z>@#t^(>8)AQhUqQWk1N*F$-zm#^a{_TZu=!AJo8J+mkdC!~`)xOi;80xs>^F7XH}h zR_1=}3B|r;3A%IGvJo_F_&mD3p$~!{NE~P3kDiZV%SMo|=Q*?2 zlprNNussey%ow_Rw$S(VJX7|3y#8|TVo1{GVvAD6E(}5cL->D~F+t7bp8x{@Mh*7P TpBMiT00000NkvXXu0mjf%!0Qw literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Groceries.imageset/Groceries@3x.png b/Checklists/Assets.xcassets/Groceries.imageset/Groceries@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f51606be52429779c7aceead0a28335988d36431 GIT binary patch literal 1401 zcmV-<1%~>GP)C52Z{N+$6{^)L0h$MGxC9^!0ATg|POddnj7N~8r>)*h(`MyKeZy==gQX}jrwKZx-6q|picAnY>MwnkrXplvCn+YTx z{&7gyzQ+b$1G_8iKLEn=#h%1IyT}s5$pqVVu4|)n$i_GjCWkFy`zAM8d_k7ze}oxl ziMF285X0oaF8F0?D++B^c$*EIj({+EyrH%zyq-EY>+2s_nqHJ@N)FpqM$B$Gh!eU@B|G7x4zemRvz zNMg1mYF92KD;kn4-~LIhpU6$X5y9qve4|$6uP;)2i5TVvSA^|(4YCMtGhgQc9FiDFI^ReZ zA&CwovB;&YosW`!E{i&lIu<0+3?&lJKP(%N6~(`@5YtMKM7MG{XW@9(svaOLJ+mt% z5)M-=)ET`X%mOY6X}DOeFhPaHRgxk<2MBYJ&a>){b8%9 zoul?irC-e?iMk_fJV3Gt_i4P9M_8M|g^4gj;$;tR=k)%J@cuCi*F{(6S-bbtCS8rv zHWk@umW0ECzikHXPE&h8?M`S(M@ZNW(5D;D(q9=%U^;-zu%1n;_D@IzBGZk}J&EIF zB^@>U$nu~&!q_@W`vKn7`$TO$sH|+$XFI2o*h%eipmNH5dP3r#2(=zGBymz0&aB=x zMdDdTd7#LB*b)4iG?YZsXDnxus6$w}UcAT|w*VAPj^7APfLuAPfkfu;0RVF`&MPzH9~DFC#y72owKd?pi>E zT^F`r2iz|+KQ(@o&VI3LKp-4c9pHu@q!1>yhz&OK1`F8Z+tcS z=Bi)De(J8%(Ns`a_91vb|N4qmwejE#fG_}rfiS=a{s=GtjU(^rqz$Y!00000NkvXX Hu0mjfX?T38 literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Inbox.imageset/Contents.json b/Checklists/Assets.xcassets/Inbox.imageset/Contents.json new file mode 100644 index 0000000..fea1372 --- /dev/null +++ b/Checklists/Assets.xcassets/Inbox.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Inbox@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Inbox@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/Inbox.imageset/Inbox@2x.png b/Checklists/Assets.xcassets/Inbox.imageset/Inbox@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c5113cc11e96bc1dad1a566188e7a58e8e673c7d GIT binary patch literal 913 zcmV;C18)3@P)VY-i(Q%nJ4=y4L4u{FUCMNUYjT~vC=!SPt&$>*g~S9w4l}-mZ{Z9k zH*a=k_TAlk@HKZkZ@&56?fiL@S!*-Z#Zm|gXn+B^#;60beWZXCkOERb3P=GdAO)m= zqyS1BeE}sik^qophzrOkwyiPz{FtH*K&U7H+sL()0#Mo6V@K15S*qa3I09O7 z{ZXp|V*Oov!o-5(2*`U{h&th&3ljql<8}60Sh!2(56+VLpD>}}FaVWXlVi@-#Anm> zrsBkDLc(D#2pinZZPac1C1FCrVFF?wk6ZyQ`yBlGgb4wM35b2b=9Uf~1_a~^$pq@_ ze2Hc!6ri&B^od)1atu=ijt8I&g*2xkU)1s?BaAN`Pe9IP;(mZ`RVjco!}!4Q?5p>p zp;-k`d4=-A=L*Fm3>Qv?zMQVAqF%zK3eUb~TrN8=161i6cR=Ew>vArj7^m;a0E3#0 zUKxqyY*Mhsbq5K(2epbr@<2lK`lVTx$Vxtsz%?m;kjd+TMFa2f13q1n4H| z1l#+(LY^EsPLOkG02T2H`SwXSJlYp+z97fTklQFJfEuLF$oZbRqD`ZXMUKWW0xDv* zXGPn0eBE+9TdrKQp*P}^02MJu+C}a&OuFk>zORz5ksjc)4xX`SGZ*8eA`MXax)pQM zslx{D6wfvyc@YVyj3$=rHeR1DfPBSgt=@9PC<2lY3P=GdAO)m=6p#W^Knh3!#Q`)b nQb3^rja(?8P=Hhl$XR~@*jPY0vguXQ00000NkvXXu0mjfi>`!# literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Inbox.imageset/Inbox@3x.png b/Checklists/Assets.xcassets/Inbox.imageset/Inbox@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..12b336c4dfbde52f58cbe998e25c326203290816 GIT binary patch literal 1610 zcmV-Q2DSN#P)`6pHRCwC#oiU6RMHt6t$>WR(Q9(!` z%F$353ou|oGy)YgCL|PuczU%EIZM%M6AC+Wf;ONrREEYxr86EKBo;OV3uzRU7%aSq z!8`O=XY#(s`|^BuyF2sE?99CXKlzf)-M#&0=C?ER%{TM*imIv=WNFbKdB zRWIej7e!(H*;IqAUIq_c+m)OA7Op~DQpziWF+qTEzA zmkmtU-ukDur?vf?>yUVq!MaF|XJcXytfgI~&p$zR3OmWIWx~47#{cJ=mZ7F>R`Z{O zKSgDKNcX!Qlt(~ddsw4gZBxhyff+5Zd+rSdEaZ^*HoKnBAmI3bUC-qNu<*1y6U>WXb4BL`;mCA|v+WaKCL{$!?3privv4dQ|tM!urRx{iT5MT94-$%wetP?U?4ULu$Bn^0~I#YI1a&>a3^@4yDk; zTCYhm>S0FvnXj*6UpQN>`ZEL8D7zEOkT}NznRzw2nrA`XT&zRlliKdllVvj3Q*F!O zumnrf>S0d1 zuVZ|b%Keb1tCfz6`!#pjyAC>zu!>%?eP|qenm1Su*_cc0o=0K=_6;l8i$cJsKq z&sIGt)+I3KGkP_?%C2F#9)N{{RtiRmT*sJ?3ta=-Oo?6d zhd(LHmyI>_Rdxl-5m=AfrlPjm+$Avn)uDG?BUKL}zgXz*xS9J7^Y>m?z*;>yf(z#| zG%NvNjYlG%z*>#X!kLaTBrE}7jpurwz*!bc&VhjBjAp`#b@Ftp=@>Dx;9r+&7d4Hp?2~oKy{jzdTqgTo4P)nV42m!*L@ zpJ;{tr?DrbrGRyLw&HBSMm*bbU88zWhpmY7Cl`+;4*5YX>#c6}?_^+n5|Bh=7zpZS~);B%V!GhfboEEIwqf(~=knV;i( zEr3t%V|nqfYF@f;9Lk&l7DnUDzD^stzL@tpx%Y2*2ZHwUjx2WL`a7Dg)0OqFWRR6sf1OGQi)=MsH zuJ74>7s;0bFn7JGhUZ9(-KC$o-0v>C-?HQV0BnqoQm&7e5Ymq0jJpEUD11 zGM^A&MlX$o-vcuTGtJq4^O}jRlz&`L*9Yi#*T#I#ylUv>u2)t$12fvB`rjX3QTE#y zD|C-dF)W312gdV$pN-6Ib+$yG*&S2vq7AU7Z*${+6x(j|MhX}X(wb_A8orq957qy+ z$PG$$U7??;$bda++gctO083r1fZ;#%B_;p^FbKdP00S@xz#sqvFbKdP00S@xz#st2 zP&P-pDl{8<7zALGJtSh6IT97IzaIm_kO*K9fI$G3hyD{_0J?8TLs!8?!vFvP07*qo IM6N<$f)vII+W-In literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/No Icon.imageset/Contents.json b/Checklists/Assets.xcassets/No Icon.imageset/Contents.json new file mode 100644 index 0000000..b0b7d10 --- /dev/null +++ b/Checklists/Assets.xcassets/No Icon.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "No Icon@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "No Icon@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/No Icon.imageset/No Icon@2x.png b/Checklists/Assets.xcassets/No Icon.imageset/No Icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..44fef33926bee9823bc57a466c399f2a259ca21f GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9GG!XV7ZFl&wkP%z)q z#WAGf*4qn)j0_AM%nH}-zxX_O&nW0|`=OX)6AP!1ipK;6M-B+p#G(k|frMKi6i61P qs7U~<7AWfkRixq}fMUc2aqg3ouNPiPeP#i)n!(f6&t;ucLK6VGe=ei| literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/No Icon.imageset/No Icon@3x.png b/Checklists/Assets.xcassets/No Icon.imageset/No Icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d89112d714c4f78eff9fd338db8df7fb54b5d9b GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GTRdGHLn>~)xyZ=Nz`$|X;K2Up$;^}d4&Czfs+Zz!;GEIG zC~UyUtd_vU=5v6BXGR03gaJ?_fk`dl0E^E7m;y`@tXl9J0@H#p7AAtQch?Or1BRpf WnXf);&3^%OKZB>MpUXO@geCyb2}^na literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Photos.imageset/Contents.json b/Checklists/Assets.xcassets/Photos.imageset/Contents.json new file mode 100644 index 0000000..6a59f79 --- /dev/null +++ b/Checklists/Assets.xcassets/Photos.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Photos@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Photos@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/Photos.imageset/Photos@2x.png b/Checklists/Assets.xcassets/Photos.imageset/Photos@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f39846d434ff4f61631c49bd292f918100cc8fdf GIT binary patch literal 1116 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 EZ^Z+i;{X5v literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Trips.imageset/Contents.json b/Checklists/Assets.xcassets/Trips.imageset/Contents.json new file mode 100644 index 0000000..ae4274c --- /dev/null +++ b/Checklists/Assets.xcassets/Trips.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Trips@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "Trips@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Checklists/Assets.xcassets/Trips.imageset/Trips@2x.png b/Checklists/Assets.xcassets/Trips.imageset/Trips@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..752cfec509c6ee1727d24406805bc5f775ebf09c GIT binary patch literal 1196 zcmV;d1XKHoP)gp6g9|Gq! z=(iT~ZzX$PZQB~qFz`?V{s-7<(Ppb;;}eeIb_KKxnAAXj0tOx04ysM0K6bSept-QPvs;e0=`$@xdyZxxI-oJ-iV{*ed;Sx-^=p~=yTwi2J$Plk9SCQBu#lUqLJq>)@FJbWBUa^j z%P=B_`~&6Bdy5``ioiGOBiZjQ=^S#fbF<;ePc>#MKzkGEgcTM~+Y6N_!j!?jzSDT@%KB z%q4Ek)mY!@u?6H3PaXotfb|Y>su{;V1=(Zg~N+jVE4vLYjXr<`TD@0lCDJ ztO9b0Th4%7;z=F=*~YC|0r|v}ya7t4h|Rba&gNT{at(kQIR8r?fJ#k>gP8;Lk&%U* z1ol|8*<-wQ?gA^@6_7d5d$@gsFihq5Wwu~*11LGAe5XpI`pFcal^#>db;=Fp6_C%A zDp;<)hJl}(HRaL*WIGl5D1YyB4)|O39I$hi?4|45FtdQFdC59u^=>CNk;(c-GGl5} zNMoJU3P63pZo^BGX^3l-PaXzUM|CZkR*Ai9x8Ys62UN{V9s}dRrdg(6k7UNxrkZ!< z9#Aze@h!1;U9I9>xdUYDCH1VYOz&#D&1z;#_=~RaA7%kiYW077NUt~E?>N5z0000< KMNUMnLSTZC*$Z6& literal 0 HcmV?d00001 diff --git a/Checklists/Assets.xcassets/Trips.imageset/Trips@3x.png b/Checklists/Assets.xcassets/Trips.imageset/Trips@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..637725ae4bb62fd21ae12cc84596fc605d0b385f GIT binary patch literal 1840 zcmV-02haG4P)9Ls5Quf>O*Gs7bU;6p$S1y5LAQ^LD2`II){56%$qmwz58eGygT=v0|(x|y)$>t`Q5o^?%bL4f=ZjB5Nrwn>~Yk~O<+~^G9N3z+9-pl7ZfNbP}if*XI;X0vkqX&*+&MFKXc zIR7`)SrN+2vNdu?A@prBb2#>I@+KPZ^Tz%w=19b$0#?Ze7-|~xszVy z^LUJM>aqO-%$>|rK2O9bH=&Ij1y~z^{THL0dh8ql=1xlcIzirt2`~`>CL+KDn1}!q z5nuvLM1YA1Faahaz(fR?022{lA_7c+i3l(e0Vcpi1eiz(fdx6OOMn^VYShmx)<<>C z^U4Dr?OwSR^(548gB?py&zM%nNv_)uHl6@`4#HKt>VD-np+VY;7ShRO)qT-a_wxcQ zz0lUy5v@o3jryR4y4P`CYTYA{qwTc50qcV>=Z5M~`g@6kbMy%?J6C@e8yMy^=*8;< zSn~MtY@6cbTM6T2DS$16a5tqsf?Mve4a*H9(f!;u0j9`ZP@5HibRX(fZF<(*r?q90 z+gN&FG}AB);fC?5bEZ&VY4a>Zz-^dP+I5NB8k7~-l@RXg*OPdy$Aogo zLA8l&yx(VF^senS)M>>i$_cdviX&UtrmB6@Y;%Wiz$hv5SK1Z$E9y!po~&fsR9ngR zYkUEA8-)1?RRg|;Fr{lzWj@=e+I*UQk!xTtpq_`?3Dnn7XF%~~2HUDmT%S)90ZYirW!oD$W)# znhZSv^^>8?GBmn}=k0bIriNmN25oAL>f8X?{yxhxsGsaU04*lFZ2-FmYV*I7egftM z|7qn$)E6Oq<2wb7f1)D|Fjc4cTy)Of4D9JREyM z2I^sG{aY%wf$4gf+p@y4ja#Aqh3$6JIg$dS*YtZdV<`W-jWptFJep|YJeu-32;na} z^jic*b#3Fir<pv|qS z0}XDGHw&=*Uj4bfMfw1&ozBbMEi&)GmO8ivdUcD;Gcem%_bgVgZ;^QhX2Ur*pl(9_ z6v9{X=lJs`{-2GDNProD4aDe0t5M&E`d$4d{h5zl9i#UR2(Z?`;`E|QLXFe=as@0e zuU8tq@}Qn@CxodZ9^hxQMnc0Ed~-peC+XU}aw6p1%V?2J5|6v>6iA{+rGBEUoh en6L7`00RIGw)@FJ1k(oq0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -198,6 +232,7 @@ + @@ -205,6 +240,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Checklists/Checklist.swift b/Checklists/Checklist.swift index 9a4d569..37a10ad 100644 --- a/Checklists/Checklist.swift +++ b/Checklists/Checklist.swift @@ -3,10 +3,12 @@ import UIKit class Checklist: NSObject, NSCoding { var name: String var items: [ChecklistItem] + var iconName: String - init(name: String, items: [ChecklistItem]) { + init(name: String, items: [ChecklistItem], iconName: String) { self.name = name self.items = items + self.iconName = iconName super.init() } @@ -21,11 +23,13 @@ class Checklist: NSObject, NSCoding { required init?(coder aDecoder: NSCoder) { name = aDecoder.decodeObjectForKey("Name") as! String items = aDecoder.decodeObjectForKey("Items") as! [ChecklistItem] + iconName = aDecoder.decodeObjectForKey("IconName") as! String super.init() } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(name, forKey: "Name") aCoder.encodeObject(items, forKey: "Items") + aCoder.encodeObject(iconName, forKey: "IconName") } } diff --git a/Checklists/DataModel.swift b/Checklists/DataModel.swift index 440234d..9878acc 100644 --- a/Checklists/DataModel.swift +++ b/Checklists/DataModel.swift @@ -61,7 +61,7 @@ class DataModel { let firstTime = userDefaults.boolForKey("FirstTime") if firstTime { - let checklist = Checklist(name: "List", items: []) + let checklist = Checklist(name: "List", items: [], iconName: "No Icon") lists.append(checklist) indexOfSelectedChecklist = 0 userDefaults.setBool(false, forKey: "FirstTime") diff --git a/Checklists/ListDetailViewController.swift b/Checklists/ListDetailViewController.swift index 42d3b14..b1bef63 100644 --- a/Checklists/ListDetailViewController.swift +++ b/Checklists/ListDetailViewController.swift @@ -7,14 +7,16 @@ protocol ListDetailViewControllerDelegate: class { func listDetailViewController(controller: ListDetailViewController, didFinishEditingChecklist checklist: Checklist) } -class ListDetailViewController: UITableViewController, UITextFieldDelegate { +class ListDetailViewController: UITableViewController, UITextFieldDelegate, IconPickerViewControllerDelegate { @IBOutlet weak var textField: UITextField! @IBOutlet weak var doneBarButton: UIBarButtonItem! + @IBOutlet weak var iconImageView: UIImageView! weak var delegate: ListDetailViewControllerDelegate? var checklistToEdit: Checklist? + var iconName = "Folder" override func viewDidLoad() { super.viewDidLoad() @@ -23,7 +25,10 @@ class ListDetailViewController: UITableViewController, UITextFieldDelegate { title = "Edit Checklist" textField.text = checklist.name doneBarButton.enabled = true + iconName = checklist.iconName } + + iconImageView.image = UIImage(named: iconName) } override func viewWillAppear(animated: Bool) { @@ -31,6 +36,13 @@ class ListDetailViewController: UITableViewController, UITextFieldDelegate { textField.becomeFirstResponder() } + override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + if segue.identifier == "PickIcon" { + let controller = segue.destinationViewController as! IconPickerViewController + controller.delegate = self + } + } + @IBAction func cancel() { delegate?.listDetailViewControllerDidCancel(self) } @@ -38,15 +50,20 @@ class ListDetailViewController: UITableViewController, UITextFieldDelegate { @IBAction func done() { if let checklist = checklistToEdit { checklist.name = textField.text! + checklist.iconName = iconName delegate?.listDetailViewController(self, didFinishEditingChecklist: checklist) } else { - let checklist = Checklist(name: textField.text!, items: []) + let checklist = Checklist(name: textField.text!, items: [], iconName: iconName) delegate?.listDetailViewController(self, didFinishAddingChecklist: checklist) } } override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { - return nil + if indexPath.section == 1 { + return indexPath + } else { + return nil + } } func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { @@ -55,5 +72,11 @@ class ListDetailViewController: UITableViewController, UITextFieldDelegate { doneBarButton.enabled = (newText.length > 0) return true } + + func iconPicker(picker: IconPickerViewController, didPickIcon iconName: String) { + self.iconName = iconName + iconImageView.image = UIImage(named: iconName) + navigationController?.popViewControllerAnimated(true) + } } diff --git a/IconPikerViewController.swift b/IconPikerViewController.swift new file mode 100644 index 0000000..6bf7e5f --- /dev/null +++ b/IconPikerViewController.swift @@ -0,0 +1,43 @@ +import UIKit + +protocol IconPickerViewControllerDelegate: class { + func iconPicker(picker: IconPickerViewController, didPickIcon iconName: String) +} + +class IconPickerViewController: UITableViewController { + weak var delegate: IconPickerViewControllerDelegate? + + let icons = [ + "No Icon", + "Appointments", + "Birthdays", + "Chores", + "Drinks", + "Folder", + "Groceries", + "Inbox", + "Photos", + "Trips" + ] + + override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return icons.count + } + + override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCellWithIdentifier("IconCell", forIndexPath: indexPath) + + let iconName = icons[indexPath.row] + cell.textLabel!.text = iconName + cell.imageView!.image = UIImage(named: iconName) + + return cell + } + + override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + if let delegate = delegate { + let iconName = icons[indexPath.row] + delegate.iconPicker(self, didPickIcon: iconName) + } + } +} \ No newline at end of file