[iOS] UITextField ์ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ
์ซ์๋ง ์ ๋ ฅํด์ผํ๋ ํ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด ๋, ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํตํด ๋ฌธ์๊ฐ ์ ๋ ฅ๋๋ ๊ฒ๋ ๋ฐฉ์งํด์ผ ํ ๊ฒ์ด๋ค.
๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋ฌธ์๊ฐ ์ ๋ ฅ๋ ์ดํ์ ๊ฐ์งํด์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง,
๋ถ์ฌ๋ฃ๊ธฐ ์์ฒด๋ฅผ ์์ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์๋ ์๋ค.
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