728x90
반응형
안녕하세요 이웃님들!! 개발하는 윤기사입니다~
최근 개인 앱 출시 준비하느라 블로그에 소홀했던 점!! 죄송합니다...ㅠ.ㅠ (너무 바빴어요...🥲)
그래서 오늘부터 올려드리는 포스팅들은 개인 앱 출시 준비하면서 어려움을 겪었던 부분을 하나씩 올려드리려고 합니다!
첫 번째, 바로 시작해보시죠! 텍스트 필드에 천의 자리마다 쉼표를 찍는 방법입니다.
제가 만들었던 앱 중에 한 가지 메뉴인 복리 계산기 탭입니다.
TextField의 원금과 이자율, 투자기간은 모두 숫자이기 때문에 천의 자리마다 (,) 콤마가 필요했습니다.
1. 사용하고자 하는 ViewController에 텍스트 필드 딜리 게이트를 선언합니다. 함수는 <shouldChangeCharactersIn>을 이용합니다.
extension CaculateViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// 여기 안에다가 내용 삽입
return true
}
}
2. 그 안에 NumberFormatter를 설정해줍니다.
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale.current
formatter.maximumFractionDigits = 0 //소수점을 몇 번째 자리까지 표시할 지 정하는 것.
3. 그리곤 TextField 안에 text를 검사합니다. 내용인 text가 숫자인지 아닌지, 비어있는지 아닌지를 검사합니다.
if let removeAllSeprator = textField.text?.replacingOccurrences(of: formatter.groupingSeparator, with: ""){
var beforeForemattedString = removeAllSeprator + string
if formatter.number(from: string) != nil {
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
} else {
if string == "" {
let lastIndex = beforeForemattedString.index(beforeForemattedString.endIndex, offsetBy: -1)
beforeForemattedString = String(beforeForemattedString[..<lastIndex])
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
} else {
return false
}
}
}
4. 마지막으로 딜리게이트를 self로 연결해줍니다.
TextField.delegate = self
< 전체 코드 >
extension CaculateViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale.current
formatter.maximumFractionDigits = 0
if let removeAllSeprator = textField.text?.replacingOccurrences(of: formatter.groupingSeparator, with: ""){
var beforeForemattedString = removeAllSeprator + string
if formatter.number(from: string) != nil {
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
} else {
if string == "" {
let lastIndex = beforeForemattedString.index(beforeForemattedString.endIndex, offsetBy: -1)
beforeForemattedString = String(beforeForemattedString[..<lastIndex])
if let formattedNumber = formatter.number(from: beforeForemattedString), let formattedString = formatter.string(from: formattedNumber){
textField.text = formattedString
return false
}
} else {
return false
}
}
}
return true
}
}
전체 코드를 복사 붙여 넣기만 하셔서 TextField에 딜리 게이트 연결만 해주신다면 천의 자리마다 콤마가 잘 찍히는 걸 확인하실 수 있습니다!
오늘 개발하는 윤기사는 여기서 포스팅을 마치겠습니다!
728x90
반응형
'iOS_Swift 앱개발👍' 카테고리의 다른 글
[iOS_Swift] 터미널 & git 명령어 모음 _ 26 (30) | 2022.10.04 |
---|---|
[iOS_Swift] TextField (,) 콤마 제거 후 숫자 계산 _ 25 (30) | 2022.10.03 |
[iOS_Swift] Realm Studio를 이용한 DB 관리하기_ 23 (31) | 2022.08.28 |
[iOS_Swift] 예외처리(throw, do_catch, try) _ 22 (30) | 2022.08.24 |
[iOS_Swift] 타입 캐스팅(Type Casting)의 모든 것 _ 21 (31) | 2022.08.18 |