โœ๏ธ TIL

[ TIL ] ๊ทธ์ € ํ–‰๋ณต๐Ÿ’— / ์ฝ”๋“œ VS ์Šคํ† ๋ฆฌ ๋ณด๋“œ์˜ ํ™”๋ฉด ์ด๋™ ๋ฐฉ๋ฒ• / 24๋…„ 3์›” 25์ผ

EarthSea 2024. 3. 25. 20:26

์ถœ์ฒ˜ : ํ•€ํ„ฐ๋ ˆ์ŠคํŠธ

 

์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค.. ๋‚ด๋ฐฐ์บ .. ๐Ÿ’—

์ €..์ด๋ฒˆ์ฃผ ์šฐ์ˆ˜ TIL๋กœ ์„ ์ •๋์–ด์š”!!!

 

 

๋„ˆ๋ฌด ๋ฟŒ๋“ฏํ•˜๊ณ , ๊ธฐ์˜๋„ค์šค..! ๊ทธ๋ƒฅ ๋ช…์˜ˆ +1 ์ด์ง€๋งŒ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

๋” ์—ด์‹ฌํžˆ TIL ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๊ฒŒ ๋งŒ๋“œ๋Š”.. ๊ทธ๋Ÿฐ ์ƒ์ด๋ž„๊นŒ..? ใ…Ž

 

 

์•”ํŠผ! ๊ทธ๋ ‡๊ธฐ์— ์˜ค๋Š˜๋„ TIL์„ ์—ด์‹ฌํžˆ ์ž‘์„ฑํ•ด๋ด์•ผ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?!

๋งจ๋‚  ์‹œ๊ฐ„์— ์ซ’๊ฒจ์ ๋Š” TIL ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์–ด์ œ ๊ต๋ณด๋ฌธ๊ณ ์™€ ์•Œ๋ผ๋”˜ ์„œ์ ์„ ๋‹ค๋…€์™”์–ด์š”!โœจ

์ œ๊ฐ€ CS์ง€์‹์ด ๋ถ€์กฑํ•œ ๊ฑฐ ๊ฐ™์•„์„œ! ๋ฌธํ•ด๋ ฅ๋„ ๊ธฐ๋ฅผ๊ฒธ ์ฑ…์„ ๋‘ ๊ถŒ ์‚ฌ์™”์Šต๋‹ˆ๋‹ค!!

"1์ผ 1๋กœ๊ทธ 100์ผ ์™„์„ฑ IT์ง€์‹"๊ณผ "๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ" ์—์š”~!

์•„์นจ๊ณผ ์ €๋…์— ๊พธ์ค€ํžˆ ์ฝ์–ด์„œ ์ง€์‹์„ ์ข€ ๋” ์ถ”๊ฐ€ํ•ด TIL๋กœ ์จ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค! ๋ฌผ๋ก  ๋‚ด์ผ๋ถ€ํ„ฐ์š”! ์ ˆ๋Œ€ ๋ฏธ๋ฃจ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์˜ค๋Š˜ ์•„์นจ์— ์šด๋™ ์‹œ๊ฐ„์ด ์˜ค๋ฐ”๋˜์–ด์„œ ์ฑ…์ฝ์„๋ ค๊ณ ํ•œ ๊ณ„ํš์ด ๋ฌด๋„ˆ์กŒ์–ด์š”ใ…‹ใ…‹ใ…‹

 

 

 

-[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:]  perform input operation requires a valid sessionID. inputModality = Keyboard, inputOperation = <null selector>, customInfoType = UIEmojiSearchOperations

์˜ค๋Š˜ ์ด๋Ÿฐ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€์™€ ๋งž๋‹ฅ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ์—๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ TextField๋งŒ ์“ฐ๋ฉด ์ €๋Ÿฐ ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๋”๋ผ๊ตฌ์š”?! ์—„์ฒญ๋‚˜๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ด์ง€๋งŒ, ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—๋งŒ ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋กœ ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋ ๊ฑฐ ๊ฐ™๋‹ค๋Š” ๋‹ต๋ณ€์„ ๋ฐ›์•„์„œ ๋ฌด์‹œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.. ๊ทผ๋ฐ ๋„ˆ๋ฌด ์‹ ๊ฒฝ ์“ฐ์ด๋Š” ๊ฑธ์š”ใ… 

 

 

 

์ฝ”๋“œ๋กœ ์ง  ํ™”๋ฉด ์ด๋™ / ์Šคํ† ๋ฆฌ ๋ณด๋“œ๋กœ ์ง  ํ™”๋ฉด ์ด๋™

์˜ค๋Š˜ ์Šคํ† ๋ฆฌ ๋ณด๋“œ๋กœ ์ง  ํ™”๋ฉด์ด๋™์„ ์ฝ”๋“œ๋กœ ์ง  ํ™”๋ฉด ์ด๋™์ฒ˜๋Ÿผ ํ•˜๋ ค๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๋„ ๋ชปํ•˜๊ณ  1์‹œ๊ฐ„์„ ๋‚ ๋ ธ์–ด์š”. ๊ทธ๋ƒฅ ์ œ๊ฐ€ ๋ฐ”๋ณด์˜€์–ด์š”.

 

์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ์งœ๋†“๊ณ , ๋ƒ…๋‹ค SecondViewController()๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ์ฃผ๋Š” ๋‚˜๋ž€ ์‚ฌ๋žŒ.. ์™œ ๊ทผ๋ฐ ๋‹ค๋ฅผ๊นŒ์š”?! ์™œ ์ฝ”๋“œ๋กœ ํ™”๋ฉด์ด๋™์ด๋ž‘ ์Šคํ† ๋ฆฌ ๋ณด๋“œ๋กœ ํ™”๋ฉด์ด๋™์„ ๋‹ค๋ฅด๊ฒŒ ์งœ์•ผํ• ๊นŒ์š”?!

// ์ฝ”๋“œ๋กœ ํ™”๋ฉด ์ด๋™
@IBAction func storyboardWithCodeButtonTapped(_ sender: UIButton) {
    let secondVC = SecondViewController()
   
}
// ์Šคํ† ๋ฆฌ ๋ณด๋“œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ํ™”๋ฉด ์ด๋™
@IBAction func storyboardWithCodeButtonTapped(_ sender: UIButton) {
    let secondVC = storyboard?.instantiateViewController(withIdentifier: "secondVC")
 
}

 

์™œ๋ƒ๋ฉด, ์ฝ”๋“œ๋กœ์˜ ํ™”๋ฉด์—์„œ์˜ SecondViewController๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์œ„์น˜ํ•ด ์žˆ๊ณ , ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ๋งŒ๋“  UI("secondVC")๋Š” ํž™ ์˜์—ญ์— ์œ„์น˜ํ•ด ์žˆ์–ด์š”. ๋‘˜์˜ ์ €์žฅ๋œ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด ์ด๋™ํ•  ๋•Œ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์Šคํ† ๋ฆฌ ๋ณด๋“œ๋กœ UI๋ฅผ ์งค๋•Œ๋Š” SecondViewController์™€ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ( ์˜ˆ๋ฅผ ๋“ค๋ฉด, @IBOutlet ์œผ๋กœ ) ๋‹จ์ˆœํžˆ SecondViewController๋ผ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•ด์„œ ์—ฐ๊ฒฐ์ด ๋˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฑฐ์ฃ ! ๊ทธ๋ž˜์„œ ์Šคํ† ๋ฆฌ ๋ณด๋“œ์˜ identifier๋ฅผ ์ง€์ •ํ•ด์ค€๋’ค ํ•ด๋‹น identifier๋กœ SecondViewController์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

Picker

ํ”ผ์ปค๋ทฐ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ •ํ•ด์ ธ์žˆ๋Š” ๊ฐ’๋“ค ์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•˜๋„๋ก ์œ ๋„ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด์ž…๋‹ˆ๋‹ค!

TableView์™€ ๋น„์Šทํ•œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์š”!

 

Picker๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 

pickerView.delegate = self
pickerView.dataSource = self

delegate์™€ dataSource์˜ ๋ชฉ์ ์ง€๋ฅผ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ๋กœ ๋‘์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ UIPickerViewDelegate์™€ UIPickerViewDataSource ํ”„๋กœํ† ์ฝœ์„ ๊ผญ! ์ฑ„ํƒํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ , ํ•ด๋‹น ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•  ์‹œ ์•„๋ž˜ ๋‘ ํ•จ์ˆ˜๋ฅผ ๋ฌด์กฐ๊ฑด ์ •์˜๋‚ด๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// Pickerview์˜ ์—ด์˜ ๊ฐœ์ˆ˜
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
    
// Pickerview์˜ ํ–‰์˜ ๊ฐœ์ˆ˜
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return colors.count
}

์œ„๋Š” PickerView์˜ ์—ด์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋…„, ์›”, ์ผ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ Pickerview ๋กœ ์„ ํƒ๋˜๋„๋ก ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด numberOfComponents์˜ ์—ด์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ๊ฐ€ ๋˜๊ฒ ์ง€์š”!

 

์•„๋ž˜๋Š” PickerView์˜ ํ–‰์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•œ ์—ด๋‹น ๋ช‡ ๊ฐœ์˜ ์„ ํƒ์ง€๋ฅผ ์ค„ ๊ฑด์ธ์ง€๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.