-
[iOS] UITextField ์ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ธฐiOS/๐ค App 2022. 11. 3. 23:26
์ซ์๋ง ์ ๋ ฅํด์ผํ๋ ํ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด ๋, ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํตํด ๋ฌธ์๊ฐ ์ ๋ ฅ๋๋ ๊ฒ๋ ๋ฐฉ์งํด์ผ ํ ๊ฒ์ด๋ค.
๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋ฌธ์๊ฐ ์ ๋ ฅ๋ ์ดํ์ ๊ฐ์งํด์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง,
๋ถ์ฌ๋ฃ๊ธฐ ์์ฒด๋ฅผ ์์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์๋ ์๋ค.
UITextField ์ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ๋ฐฉ์งํด๋ณด์.
์ฌ์ฉ์๋ UITextField ๋ฅผ ํญํ์ฌ ์๋์ ๊ฐ์ UI ๋ฅผ ํ๋ฉด์ ๋์ธ ์ ์๋ค.
์ด๊ฒ์ editing menu ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ทธ๋ฆฌ๊ณ editing menu ๊ฐ ๋ฑ์ฅํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ์๋ค.
canPerformAction(_:withSender:) ์ด๋ค.
์ด ๋ฉ์๋๋ UIResponder ์ ์ ์๋์ด์๋ค.
UITextField ๋ UIResponder ๋ฅผ ์์ํ ํด๋์ค์ด๋ฏ๋ก, ์ฌ์ฉ์๊ฐ TextField ๋ฅผ ํญํ ๋ canPerformAction(_:withSender:) ๊ฐ ํธ์ถ๋๋ค.
์์คํ ์ ์ด ๋ฉ์๋์ action ๋ค์ ์ ๋ฌํ๊ณ ,
๋ฉ์๋๊ฐ ๋ฐํํ ๊ฐ์ผ๋ก ์์ UI ์ action ์ ์ถ๊ฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.
action ์๋ copy, paste ๋ฑ์ด ์๋๋ฐ,
UIStandartEditAction ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด ๋ ๋ค์ํ action ์ ์ดํด๋ณผ ์ ์๋ค.
๋ค์ ๋์์์, canPerformAction(_:withSender:) ๊ฐ
- true ๋ฅผ ๋ฐํํ๋ฉด ์์คํ ์ edit menu ์ ํด๋น ์ก์ ์ ์ถ๊ฐํ๋ค.
- false ๋ฅผ ๋ฐํํ๋ฉด ์์คํ ์ edit menu ์ ํด๋น ์ก์ ์ ์ถ๊ฐํ์ง ์๋๋ค.
์ ๊ท์น์ ์ด์ฉํด์ ๊ตฌํํ๋ฉด,
- ์์คํ ์ด canPerformAction(_:withSender:) ์ paste(_:) ๋ฅผ ์ ๋ฌํ ๋, false ๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด UITextField ์ ๋์์ ์ ์งํ๋ฉด์ ์ด ๋ถ๋ถ์ ๋์๋ง ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ด ์์๊น?
๋๋ ์์๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ด์ฉํด์ ์๋์ ๊ฐ์ด ๊ตฌํํด๋ณด์๋ค.
๋ ์ข์ ๊ตฌํ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๊ณต์ ํด์ฃผ์ธ์!
import UIKit final class PasteBlockableTextField: UITextField { private var _isPasteBlocked: Bool = false var isPasteBlocked: Bool { get { self._isPasteBlocked } set { self._isPasteBlocked = newValue } } override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { if isPasteBlocked && action == #selector(UIResponderStandardEditActions.paste(_:)) { return false } return super.canPerformAction(action, withSender: sender) } }
์ค๋๋ ๋๋ ์ฑ์ฅํ๋ค!!๐ฅ
๐ค [Back to the Basics] ๐ป
์ฃผ๋์ด iOS ๊ฐ๋ฐ์ ์ฐ์งฑ์ ๊ธฐ์ ๋ธ๋ก๊ทธ์ ๋๋ค.[์ฐธ๊ณ ์๋ฃ ๐๐ปโ๏ธ]
https://developer.apple.com/documentation/uikit/uiresponder/1621105-canperformaction/
https://developer.apple.com/documentation/uikit/uiresponderstandardeditactions
https://developer.apple.com/documentation/uikit/uiresponderstandardeditactions/2354189-paste
'iOS > ๐ค App' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ์ปค์คํ ํฐํธ๋ฅผ ์ ์ฉํด๋ณด์ (0) 2021.11.06 [iOS] init(nibName:bundle:)๊ณผ init?(coder:) ์์๋ณด๊ธฐ (2) 2021.10.25 [iOS] clipsToBounds ์ masksToBounds (2) 2021.10.19 [SSAC ์น] iOS ๊ฐ๋ฐ์ ๋ฐ๋ท๊ณผ์ ํฉ๊ฒฉ ํ๊ธฐ (2021) (2) 2021.09.24 [iOS] Safe Area ์ Layout Margins ์ด๋? (3) 2021.08.10