RxSwift: UITextField.text์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ ๋
ํ์ฌ ํ๊ณ ์๋ ํ ์ด ํ๋ก์ ํธ์์ ์ฌ์ฉ์์๊ฒ ์ด๋ชจ์ง๋ฅผ ์
๋ ฅ๋ฐ๋๋ค. ์ผ๋ฐ์ ์ธ ํค๋ณด๋๋ก ์
๋ ฅ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ISEmojiView ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ EmojiViewDelegate
๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ๊ทธ์ค์์ ํต์ฌ์ ์ด ๋ถ๋ถ์ด๋ค.
// callback when tap a emoji on keyboard
func emojiViewDidSelectEmoji(_ emoji: String, emojiView: EmojiView) {
textView.insertText(emoji)
}
๋๋ ๋ฑ ํ๋์ ์ด๋ชจ์ง๋ง ์
๋ ฅ๋ฐ๊ณ ์ถ์ด์, insertText()
๋ฅผ ํธ์ถํ๋ ๋์ ์ emojiField.text = emoji
๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ด ์๊ฒผ๋๋ฐ emojiField
์ ๋ฐ์ธ๋ ํ PublishRelay
์์ ํ
์คํธ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ๋๋ ๋จ์ํ๊ฒ, ์ง์ ์ด๋ฒคํธ๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค.
// callback when tap a emoji on keyboard
func emojiViewDidSelectEmoji(_ emoji: String, emojiView: EmojiView) {
emojiField.text = emoji
viewModel.emojiField.accept(emoji)
}
๊ทธ๋ฐ๋ฐ...!
์คํฐ๋์์ ๋ค๋ฅธ ๋ถ์ด ๋ณธ์ธ ๋ฌธ์ ํด๊ฒฐํ ๊ฑธ ๊ณต์ ํ์
จ๋๋ฐ ๊ทธ๊ฒ ๋์ ๊ฐ์ ๋ฌธ์ ์์๋ค. ํด๊ฒฐ์ฑ
์ ์ญ์๋, ์๋์ผ๋ก ์๋ ค์ฃผ๋ ๊ฒ์ธ๋ฐ ๋ค๋ฅธ ์ ์ ๋์ฒ๋ผ ํน์ ์ต์ ๋ฒ๋ธ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ ์๋๋ผ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฑธ UITextField
์ ์๋ฆฌ๋ ๊ฒ์ด๋ค.
// callback when tap a emoji on keyboard
func emojiViewDidSelectEmoji(_ emoji: String, emojiView: EmojiView) {
emojiField.text = emoji
emojiField.sendActions(for: .valueChanged)
}
์ด๋ ๊ฒ ํ๋ฉด, ์ฌ๋ฌ ๊ฐ์ ์ต์ ๋ฒ๋ธ์ ๋ฐ์ธ๋ฉ์ด ๋์ด ์์ด๋ ๋ด๊ฐ ํ๋ ๋ฐฉ์์ฒ๋ผ ์ผ์ผ์ด ์๋ ค์ค ํ์๊ฐ ์๋ค.
์! ๊ฐ๊ฟ!
ํด๊ฒฐํ๊ณ ๋๋๊น ๋๋ ์๊ฐ์ ์ ์ง์ ๋์ ํ๋ ๊ฑด ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ง ๋ชปํ๋ ๊ฒ์ผ๊น? ์๋๋ฐ ๊ทธ๊ฒ๋ง์ ๋ ๋ต๋ณ์ ์ฐ์ฌ์์๋ค.
ํด๊ฒฐ์ฑ
๋ณด๋๋ผ ๋ด์ฉ์ ๋ณด์ง๋ ์์์.
On digging a little bit more, I realized that the rx.text depends on UIControlEvents and these are not triggered when you explicitly set the text.
์กฐ๊ธ ๋ ์์ธํ ์ดํด๋ณด๋ฉด, rx.text๊ฐ UIControlEvents์ ์์กดํ๊ณ ๋ช ์์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ค์ ํ ๋ ํธ๋ฆฌ๊ฑฐ ๋์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
์ด.. ์ด๋ ค์... ๐คฏ
์ฐธ๊ณ ์๋ฃ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote