๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽ iOS138

[iOS] @escaping (2) - ์˜ํ™” API ์˜ˆ์ œ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ (@escaping with movieAPI Example) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค !! ์ „ ์‹œ๊ฐ„์—๋Š” Escaping Closure๋ฅผ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ์ •์˜์™€ ์˜ˆ์ œ๋กœ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”. ( ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ์—ฌ๊ธฐ ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”) ๊ณต์‹ ๋ฌธ์„œ์˜ ์˜ˆ์ œ๋กœ๋Š” ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ํž˜๋“œ์‹  ๋ถ„๋“ค์ด๋‚˜ ์ด๊ฒŒ ์–ด๋””์„œ ์“ฐ์ด๋Š”์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ๊ณ ์‹ถ์€ ๋ถ„๋“ค์„ ์œ„ํ•ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ณณ์€ API๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์•„์˜ฌ ๋•Œ์ธ๋ฐ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Storyboard ์šฐ์„  ์ฒซ๋ฒˆ์งธ๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ ํ…Œ์ด๋ธ”๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ ํ…Œ์ด๋ธ”๋ทฐ ์…€์—” ์˜ํ™”ํฌ์Šคํ„ฐ๋ฅผ ๋„์šธ ์ด๋ฏธ์ง€๋ทฐ์™€ ์˜ํ™” ์ด๋ฆ„์„ ๋„์šธ ๋ ˆ์ด๋ธ”์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. Xcode ํ…Œ์ด๋ธ”๋ทฐ์…€์— ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ์˜ํ™” ํฌ์Šคํ„ฐ์™€ ์ด๋ฆ„์„ ๊ฐ€์งˆ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. MoiveAPIํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€ ๋’ค ์˜ํ™”๋ชจ๋ธ์„ ๋งŒ.. 2020. 11. 1.
[iOS ๋ฉด์ ‘์งˆ๋ฌธ]@escaping์ด๋ž€? (1) - ๊ฐœ๋… ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!! ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๋‚ด์šฉ Escaping Closure์ž…๋‹ˆ๋‹ค. ์˜ˆ์ „๋ถ€ํ„ฐ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณด๋ฉด ์ธ์ž๊ฐ’ ์•ž์— @escaping์ด๋ผ๊ณ  ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์žˆ๋Š”๋ฐ ์ด๊ฒŒ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์ง€ ๋ชปํ•œ์ฑ„ ๋„˜์–ด๊ฐ”์—ˆ๋Š”๋ฐ์š”. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ํ•œ๋ฒˆ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Swift Documentation ์šฐ์„  ๊ณต์‹๋ฌธ์„œ๋ฅผ ์š”์•ฝํ•˜๋ฉด "ํ•จ์ˆ˜๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ ํ›„์— ๋ถˆ๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค " ๋ผ๊ณ  ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ํด๋กœ์ ธ๋Š” ์ธ์ž๊ฐ€ ํ•จ์ˆ˜ ๋ฐ–์—์„œ๋„ ์œ ํšจํ•œ ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ @noescape ์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (@noescape๋กœ ์„ค์ •๋œ ์ด์œ ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์ ์œผ๋กœ ํด๋กœ์ ธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.) ํ•˜์ง€๋งŒ ์ด @esca.. 2020. 11. 1.
[iOS/UI]ํƒญ๋ฐ” ์•„์ดํ…œ ๋ˆŒ๋ €์„ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„ฃ๊ธฐ (UITabBarItem Animation) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!!! ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๊ฑด ํƒญ๋ฐ”๋ฅผ ํƒญํ–ˆ์„ ๋•Œ ์ด๋ฏธ์ง€๊ฐ€ ์Šคํ”„๋ง์ฒ˜๋Ÿผ ์ปค์กŒ๋‹ค ์ž‘์•„์กŒ๋‹คํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•ด๋ณผ๊ฑฐ์—์š”. ๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Xcode ์šฐ์„  ํƒญ๋ฐ” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. override๋œ didSelect(ํƒญ๋ฐ”์•„์ดํ…œ ์„ ํƒํ–ˆ์„์‹œ) ๋ฉ”์†Œ๋“œ๋ฅผ ์จ์ค๋‹ˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์•ˆ์— ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.(์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์ฝ”๋“œ) ๊ทธ ๋‹ค์Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•ด์ค๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ didSelectํ–ˆ์„ ๋•Œ performSpringAnimationํ•จ์ˆ˜์— imageView๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค€ ๋’ค ์‹คํ–‰ํ•ด์ค๋‹ˆ๋‹ค. StoryBoard ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ์ด๋™ํ•˜์…”์„œ ํƒญ๋ฐ”์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ ์•„์ดํ…œ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. (์ €๋ ‡๊ฒŒ ์›๋ณธ ๊ทธ๋Œ€๋กœ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๊ณ  ์‹ถ์œผ๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”) ๋ฐ˜.. 2020. 10. 28.
[iOS/UI]๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ทฐ์— ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ(Image Literal) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ Image Literal์ด๋ž€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ทฐ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”! ๋จผ์ € ํ‰์†Œ์—๋Š” ์ด๋ฏธ์ง€๋ทฐ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์„ ๋•Œ ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜์—ฌ์„œ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋ฉด ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ์ผ์ผ์ด ์•Œ์•„์•ผํ•˜๊ณ  ๋„ฃ๊ธฐ ๋ฒˆ๊ฑฐ๋กœ์› ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ์š”. ๋ฐ”๋กœ ์ด๋ฏธ์ง€ ๋ฆฌํ„ฐ๋Ÿด์ด๋ž€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Image Literal์ด๋ผ๊ณ  ์นœ ๋‹ค์Œ ์‚ฌ์ง„ ์•„์ด์ฝ˜์ด ๋œจ๋Š”๋ฐ ๊ทธ๊ฒƒ์„ ๋”๋ธ”ํด๋ฆญํ•œ ๋‹ค์Œ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€ ์ค‘ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.! ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค! 2020. 10. 27.
[iOS/UI]์Šคํฌ๋กค๋ทฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•˜๊ธฐ(Simple Use UIScrollView) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ์— ์•Œ์•„๋ณผ ๊ฑด ์Šคํฌ๋กค๋ทฐ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์Šคํฌ๋กค๋ทฐ๋ฅผ ์ ์šฉํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ์ƒˆ๋กญ๊ฒŒ ๋ฐ”๋€ Content Layout Guide ์™€ Frame Layout Guide๋ฅผ ๊ณ ๋ คํ•˜๋‹ˆ ๋ณต์žกํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋–ด์Šต๋‹ˆ๋‹ค ใ…œ ๊ทธ๋ž˜์„œ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฒ•์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์Šคํฌ๋กค๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Constraints๋ฅผ ๋ชจ๋‘ 0์œผ๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ๋นจ๊ฐ„์ƒ‰ ์ค„์ด ๋œจ๋Š”๋ฐ์š” ๋‹นํ™ฉํ•˜์ง€ ๋ง๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณค ์ธ๋””์ผ€์ดํ„ฐ ์ธ์ŠคํŽ™ํ„ฐ๋กœ ๊ฐ€์„œ ๋…ธ๋ž€๋ถ€๋ถ„์œผ๋กœ ํ‘œ์‹œ๋œ Content Layout Guides์˜ ์ฒดํฌ๋ฅผ ํ’€์–ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์•„์ฃผ ํŽธ์•ˆ(?)ํ•˜๊ฒŒ ํŒŒ๋ž€์ƒ‰ ์ค„๋กœ ๋ณ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ทฐ๋ฅผ ์ปจํ…ํŠธ๋ฅผ ๋‹ด๋‹นํ•  ๋ทฐ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ๋ทฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Contraints๋ฅผ Scro.. 2020. 10. 27.
์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ(AppLifeCycle)(2) - ํ™œ์šฉ(feat.Youtube Premium) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์ €๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”. 2020. 10. 20.
[iOS ๋ฉด์ ‘์งˆ๋ฌธ]์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ(App LifeCycle) (1) - ๊ฐœ๋…(์•ฑ์ด In-Active ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๋ณผ ๊ฑด ๋ฐ”๋กœ ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  iOS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 5๊ฐ€์ง€ ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. States 1. Not running ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 2.In-active(๋น„ํ™œ์„ฑํ™”) ์•ฑ์ด ์‹คํ–‰๋˜๋ฉด์„œ ํฌ์–ด๊ทธ๋ผ์šด๋“œ์— ์ง„์ž…ํ•˜์ง€๋งŒ ์–ด๋– ํ•œ ์ด๋ฒคํŠธ๋„ ๋ฐ›์ง€ ์•Š๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 3.Active(ํ™œ์„ฑํ™”) ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด๋ฉฐ ํฌ์–ด๊ทธ๋ผ์šด๋“œ์— ์žˆ๊ณ  ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 4.Background ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์•ฑ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ๊ฑฐ๋‚˜ ํ™ˆ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ”์„ ๋•Œ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 5.Suspended ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํŠน๋ณ„ํ•œ ์ž‘์—…์ด ์—†์„ ๊ฒฝ์šฐ ์ „ํ™˜๋˜๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ AppDelegate์™€ SceneDelegate์—์„œ .. 2020. 10. 20.
[iOS] Notification์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ(Pass data using Notification) ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!! ์˜ค๋Š˜์€ Notification์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ‰์†Œ์— ๋‹ค๋ฅธ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์„ธ๊ทธ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋ฐ˜๋“œ์‹œ ๊ทธ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•ด์•ผ๋˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋Š”๋ฐ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์•„๋ฌด๋Ÿฐ ์ด๋™์—†์ด ๋ฐ์ดํ„ฐ๋งŒ ๋ณด๋‚ผ ์ˆœ ์—†์„๊นŒ?๋ฅผ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ตฌ๊ธ€๋งํ•œ ๊ฒฐ๊ณผ NotificationCenter๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ 1๊ฐœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ 1๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ์ €๋Š” ViewController์™€ TabbarViewController1์„ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. ViewController์—” item๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก์ด๋˜๊ณ  TabbarViewController1์— ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•  Label์„ ๊ฐ๊ฐ .. 2020. 9. 14.
[iOS/UI] ํ…Œ์ด๋ธ”๋ทฐ ํŠน์ • ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ด๋™ํ•˜๊ธฐ(UITableView scrollToRow) ์•ˆ๋…•ํ•˜์„ธ์š” Foma์ž…๋‹ˆ๋‹ค !! ์˜ค๋Š˜์€ ํ…Œ์ด๋ธ”๋ทฐ์—์„œ ํŠน์ • ์ธ๋ฑ์Šค ์œ„์น˜๋กœ ๋ฐ”๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋” ํ…Œ์ด๋ธ”๋ทฐ์— ์ด๋™ํ• ๋•Œ ๋ฐ”๋กœ ๋ช‡๋ฒˆ์งธ section ๋˜๋Š” row์ธ ์…€์ด ๋–ด์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋งํ•œ ๊ฒฐ๊ณผ UITableView์— scrollToRow ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ์Šคํฌ๋กค๋ง์ด ๋˜๋ฉด์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ! ๋จผ์ € ํ…Œ์ด๋ธ”๋ทฐ์™€ ํ…Œ์ด๋ธ”๋ทฐ์…€๊ณผ ๊ทธ ์•ˆ์— ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋ ˆ์ด๋ธ” ์›ํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•  ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•ด ํ…Œ์ด๋ธ”๋ทฐ์˜ row ๊ฐฏ์ˆ˜์™€ row์˜ ์…€์„ ์ •ํ•ด์ค๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์›ํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•˜๋„๋ก ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด indexPath ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์–ด ์›ํ•˜๋Š” row๋ฅผ ์ ์–ด์ฃผ๊ณ  ์•„๋ž˜ ํ˜„์žฌ ํ…Œ์ด๋ธ”๋ทฐ์— scrollT.. 2020. 9. 14.
[iOS/UI] ์„œ์น˜๋ฐ” ์ปค์Šคํ…€ํ•˜๊ธฐ (Custom UISearchBar) ์•ˆ๋…•ํ•˜์„ธ์š”! Foma์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ์—๋Š” ์„œ์น˜๋ฐ”์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณผ๊ฑด๋ฐ์š”. ๊ฐ€๋” ์„œ์น˜๋ฐ”์˜ ๋ฐฐ๊ฒฝ์ƒ‰์ด๋‚˜ ๋‹๋ณด๊ธฐ์ด๋ฏธ์ง€ ๋“ฑ์„ ๋ฐ”๊พธ๊ณ ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋งํ•ด๋ณธ ๊ฒฐ๊ณผ 1.์„œ์น˜๋ฐ”์˜ ํ”Œ๋ ˆ์ด์Šคํ™€๋”(๊ฒ€์ƒ‰ํ•˜๊ธฐ ์ „์— ํšŒ์ƒ‰๊ธ€์”จ๋กœ ๋– ์žˆ๋Š”๊ฒƒ) ์„ธํŒ… 2.์„œ์น˜๋ฐ”์˜ ์™ผ์ชฝ ๋‹๋ณด๊ธฐ ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€ ์„ธํŒ… 3.์„œ์น˜๋ฐ”์˜ ์˜ค๋ฅธ์ชฝ ์—‘์Šค๋ฒ„ํŠผ ์ด๋ฏธ์ง€ ์„ธํŒ…(๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ) 4.์„œ์น˜๋ฐ”๋ฅผ ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ”์— ๋„ฃ๋Š”๋ฒ• 5.์„œ์น˜๋ฐ”์˜ ๋ฐฐ๊ฒฝํ™”๋ฉด,๊ธ€์”จ์ƒ‰,ํ”Œ๋ ˆ์ด์Šคํ™€๋”์ƒ‰ ์„ธํŒ… 6.์„œ์น˜๋ฐ” ์™ผ์ชฝ,์˜ค๋ฅธ์ชฝ ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ ํ‹ดํŠธ์ƒ‰ ์„ธํŒ… ์ด๋ ‡๊ฒŒ ์ปค์Šคํ…€ํ•˜๋Š” ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ฐ€์žฅ ๋จผ์ € ํ•ด์ฃผ์–ด์•ผํ•  ๊ฒƒ์€ searchbar๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. = > let searchBar = UISearchBar() 1.ํ”Œ๋ ˆ์ด์Šคํ™€๋” ์„ค์ •๋ฒ•์€ searchBar์— .placeholder๋ฅผ.. 2020. 9. 2.
[iOS/UI] ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ํ‹ดํŠธ ๋ฐ ํƒ€์ดํ‹€ ์ปฌ๋Ÿฌ๋ฐ”๊พธ๊ธฐ 1 2 3 4 5 6 7 8 //iOS 13์ด์ƒ์ผ ๋•Œ ํƒ€์ดํ‹€ ์ปฌ๋Ÿฌ ๋ฐ”๊พธ๋Š” ๋ฒ• if #available(iOS 13.0, *) { navigationController?.navigationBar.standardAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] } else { navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white] } //๋ฐ” ํ‹ดํŠธ ๋ฐ”๊พธ๋Š” ๊ฒƒ self.navigationController?.navigationBar.barTintColor = UIColor.darkGray Colored by Color Scripter .. 2020. 6. 29.
[iOS/UI] UITextField ๊ธ€์ž ์ˆ˜ ์ œํ•œํ•˜๊ธฐ(UITextField set MaxLength) Swift ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ํ…์ŠคํŠธํ•„๋“œ์˜ ๊ธ€์ž ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด์„œ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~ ๋จผ์ € ์›ํ•˜์‹œ๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— UITextFieldDelegate๋ฅผ ์ฑ„ํƒํ•ด์ฃผ์‹œ๊ณ  ์ œํ•œํ•  ํ…์ŠคํŠธํ•„๋“œ์˜ ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ self๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ํ…์ŠคํŠธํ•„๋“œ ์•ก์…˜์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š”๋ฐ ๋ฐ˜๋“œ์‹œ Editing Changed๋กœ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ด์ œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธ€์ž์ˆ˜๋ฅผ ์ œํ•œํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. 1 2 3 4 5 func checkMaxLength(textField: UITextField!, maxLength: Int) { if (textField.text?.count ?? "" > maxLength) { textField.deleteBackward() } } Colored .. 2020. 6. 21.
728x90
๋ฐ˜์‘ํ˜•