๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS

[iOS] ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฝ”๋“œ๋ฒ ์ด์Šค, ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋‘˜๋‹ค ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•๐Ÿฏ

by yangsubinn 2022. 5. 30.

Component ๐Ÿ’ญ

์š” ํ•˜๋‹จ์˜ ๋ฒ„ํŠผ์ด ๋งŽ์€ ๋ทฐ์—์„œ ์žฌ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์–ด์„œ ์ปดํฌ๋„ŒํŠธํ™” ํ–ˆ์Šต๋‹ˆ๋‹ค

์ดˆ๊ธฐํ™”ํ• ๋•Œ setLayout์—์„œ width์™€ height๋ฅผ ์žก์•„์คฌ๊ตฌ, centerX๋งŒ ์žก์•„์ฃผ๋ฉด ๋ฐ”๋กœ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์™ธ์˜ ๋ฒ„ํŠผ UI์™€ title, ํ™œ์„ฑ·๋น„ํ™œ์„ฑํ™” ์ƒํƒœ ๋“ฑ์€ setUI(.type), setTitle, setAble ๋“ฑ์˜ ํ•จ์ˆ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฌธ์ œ๐Ÿšจ

์ €๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๋ทฐ๋ฅผ ์งฐ๊ธฐ ๋•Œ๋ฌธ์— BottomButton ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ช…์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ

์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์›์€ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค..

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๐Ÿ’ก

๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ–ˆ์Šด๋‹ˆ๋‹ค !

๋ณดํ†ต ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” required init์—๋„ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹น

class BottomButton: UIButton {

    // MARK: - Initialize
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setLayout()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setLayout()
    }
	
	// ...

}

 


initโ“

init(frame:)

์ง€์ •๋œ ํ”„๋ ˆ์ž„ ์‚ฌ๊ฐํ˜•์œผ๋กœ ์ƒˆ๋กœ ํ•˜๋ž‘๋œ ๋ทฐ ๊ฐœ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฐ˜ํ™˜

  • UIVIew๋‚˜ UIViewController์„ ์„œ๋ธŒํด๋ž˜์‹ฑํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €
  • Frame rectangle์„ ๊ฐ€์ง€๊ณ  ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ทฐ์˜ ์ค‘์‹ฌ๊ณผ ๊ฒฝ๊ณ„์„ ์„ ์ง€์ •
  • ์Šค๋ณด, xib, nib ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ UIView Class์˜ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ
๐Ÿ‘ฅ ์ƒˆ๋กœ์šด ๋ทฐ ๊ฐ์ฒด๋Š” ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋ทฐ ๊ณ„์ธต์— ์˜ฌ๋ผ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ์ฝ”๋“œ๋กœ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ UIView ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Subclass๋“ค์€ ํ•ด๋‹น ํ•ด์†Œ๋“œ๋ฅผ overrideํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ super์„ ์‚ฌ์šฉํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•œ ๊ฒฝ์šฐ, nib ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ทฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋Š” ๋ถˆ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. nib ํŒŒ์ผ์˜ ๊ฐ์ฒด๋Š” ์žฌ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋ฉฐ init(coder:) ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
๐Ÿ”— init(frame:)

 

init(coder:)

storyboard๋‚˜ xib์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ,

์ด๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” unarchiving ๊ณผ์ •์ด ํ•„์š”

์ด ๊ณผ์ •์„ init(coder:) ์—์„œ ์•ฑ ๋‚ด view ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์™€์ค๋‹ˆ๋‹ค

 

required init

๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €

 


์ฐธ๊ณ ์ž๋ฃŒ ๐Ÿ”—

https://sweetdev.tistory.com/366

https://velog.io/@inwoodev/iOS-initframe-initcoder

https://leeari95.tistory.com/63?category=961651

https://developer.apple.com/documentation/uikit/uiview/1622488-init

https://developer.apple.com/documentation/foundation/nscoding/1416145-init