오랜만에 포스트를 남겨야지하다가 이건 남겨도 괜찮겠다 싶어서 남깁니다.

func moneyPlaceHolder(money: Int) -> String {
    guard money >= 0 else { return "" }
    
    let moneyString = String(money)
    let moneyCount = moneyString.count
    let insertPlaceCount = 3
    
    if moneyCount <= insertPlaceCount {
        return moneyString
    }
    
    let index0: String.Index = moneyString.startIndex
    var resultString = ""
    var loopIndex = 0
    for i in (0 ..< moneyCount).reversed() {
        resultString += String(moneyString[moneyString.index(index0, offsetBy: i)])
        loopIndex += 1
        if loopIndex >= insertPlaceCount {
            resultString += ","
            loopIndex = 0
        }
    }
    return String(resultString.reversed())
}

테스트 값:

print(moneyPlaceHolder(money: 1355500))
print(moneyPlaceHolder(money: 500))
print(moneyPlaceHolder(money: 1500))
print(moneyPlaceHolder(money: 034))
print(moneyPlaceHolder(money: 65))
print(moneyPlaceHolder(money: 0))
print(moneyPlaceHolder(money: 1))
print(moneyPlaceHolder(money: -30))

/**
  result
  1,355,500
  500
  1,500
  34
  65
  0
  1
  
*/

더 짧거나 효율좋게 할 수 있는 방법이 있으면 좋겠네요.

 

 

 

https://gist.github.com/wiwi-git/646b628dec8a7ed940c3d0cc885017fd

 

돈자리수표시.swift

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

패스워드용 텍스트필드를 만들려면 Secure설정을 주면 된다.

 

하지만 이렇게 하면 포커스가 옴겨졌다 다시 텍스트필드를 수정하려고하면 기존 텍스트 내용이 날라간다.

 

보안이 필요한 텍스트필드니 당연하다 생각했는데

 

이걸 원치 않는 사람이 있나보다

 

수정되는 이전 값이 남아 있고, 값이 숨기고 보이고 할 수 있고 그런 텍스트 필드를 원하는데 어떻게 해야할까요?

 

라는 질문을 글을 보고 이렇게 하면 되지 않을까 하고 해봤는데

 

솔직히 별로 맘에 안든다.

 

다른 방법이 없으려나

 

보안이 보안답지 않고....

그렇다고 소스가 깔끔하지도 않고....

 

나중에 텍스트필드를 새로 클래스 만들어서 하면 좀 깔끔해질거같긴한데 

미묘하다.

 

 

https://github.com/wiwi-git/Hide_And_Show_TextField

 

GitHub - wiwi-git/Hide_And_Show_TextField: 포커스 옴겨도 사라지지 않고 숨기고 보이고 할 수 있는 패스워

포커스 옴겨도 사라지지 않고 숨기고 보이고 할 수 있는 패스워드용 텍스트필드가 어떻게 만들까 생각하다 끄적여보는 레포지토리 - GitHub - wiwi-git/Hide_And_Show_TextField: 포커스 옴겨도 사라지지 않

github.com

 

var textField: UITextField!
    var showButton: UIButton!
    private var hiddenText: String = "" {
        didSet{
            print("hiddenText: " + hiddenText)
        }
    }
    var isShowMode = false
    
    let secretChar = "*"
    
    override func viewDidLoad() {
        super.viewDidLoad()
        textField = createTextField()
        showButton = createShowButton()

        view.addSubview(textField)
        view.addSubview(showButton)
        
        let viewGuide = view.safeAreaLayoutGuide
        textField.translatesAutoresizingMaskIntoConstraints = false
        showButton.translatesAutoresizingMaskIntoConstraints = false
        [
            textField.topAnchor.constraint(equalTo: viewGuide.topAnchor, constant: 30),
            textField.leadingAnchor.constraint(equalTo: viewGuide.leadingAnchor, constant: 16),
            textField.trailingAnchor.constraint(equalTo: viewGuide.trailingAnchor,constant: -16),
            textField.heightAnchor.constraint(equalToConstant: textField.frame.height),
            
            showButton.topAnchor.constraint(equalTo: textField.bottomAnchor, constant: 8),
            showButton.trailingAnchor.constraint(equalTo: viewGuide.trailingAnchor,constant: -16),
            showButton.heightAnchor.constraint(equalToConstant: textField.frame.height),
            showButton.widthAnchor.constraint(equalToConstant: 100)
        ].forEach { $0.isActive = true }
    }
    
    func createTextField() -> UITextField {
        let textFieldSize = CGSize(width: 0, height: 35)
        let textField = UITextField(frame: CGRect(origin: .zero, size: textFieldSize))
        textField.layer.borderWidth = 1
        textField.layer.cornerRadius = 10
        textField.textContentType = .password
        textField.placeholder = "password"
        textField.keyboardType = .asciiCapable
        textField.isSelected = false
        
        textField.addTarget(self, action: #selector(textFieldEditingChangedAction(_:)), for: .editingChanged)
        return textField
    }

    func createShowButton() -> UIButton {
        let showButton = UIButton(frame: CGRect(origin: .zero, size: CGSize(width: 100, height: 35)))
        showButton.setTitle("Set Show", for: .normal)
        showButton.setTitleColor(.systemBlue, for: .normal)
        showButton.backgroundColor = .clear
        showButton.setBackgroundImage(nil, for: .normal)
        showButton.layer.borderWidth = 1
        showButton.layer.borderColor = UIColor.systemBlue.cgColor
        showButton.layer.cornerRadius = 10
        showButton.addTarget(self, action: #selector(showButtonAction(_:)), for: .touchUpInside)
        
        return showButton
    }
    
    @objc func showButtonAction(_ sender: UIButton) {
        if ( sender.titleLabel?.text == "Set Show") {
            self.isShowMode = true
            sender.setTitle("Set Hide", for: .normal)
            sender.layer.borderColor = UIColor.clear.cgColor
            sender.backgroundColor = .darkGray
            sender.setTitleColor(.white, for: .normal)
            
            self.textField.text = hiddenText
            
        } else {
            self.isShowMode = false
            sender.setTitle("Set Show", for: .normal)
            sender.setTitleColor(.systemBlue, for: .normal)
            sender.backgroundColor = .clear
            sender.layer.borderColor = UIColor.systemBlue.cgColor
            
            textField.text = ""
            hiddenText.forEach { _ in
                textField.text! += secretChar
            }
        }
    }
    
    @objc func textFieldEditingChangedAction(_ textField: UITextField) {
        guard let last = textField.text?.last else {
            hiddenText = ""
            return
        }
        
        if textField.text?.count ?? 0 > hiddenText.count {
            if (!isShowMode) {
                textField.text?.removeLast()
                textField.text! += secretChar
            }
            hiddenText += String(last)
        } else {
            hiddenText.removeLast()
        }
    }

Attempted to scroll the collection view to an out-of-bounds item (0) when there are only 0 items in section 0.

 

늦은 업데이트를 진행하였고 시뮬레이터가 15.2가 되었다.

회사 프로젝트를 돌려보던중 시뮬레이터에서 위와 같은 에러가 나면서 종료가 되고있다.

 

내용만 봐선 "아이템이 0인데 스크롤을 0으로 하려고한다 그러지마 "  라며 친절히 문제되는 부분을 알려주지만

 

이전에는 됐는데?

 

참담한 심정으로 콜렉션뷰의 스크롤하는 부분

      self.collectionView.scrollToItem

부분을

if (.count != 0 ) 를 걸어주어 0 이후에 변경될때만 호출해주도록 변경하였다.

 

동작은 한다

 

뭔가 미묘한 기분

https://www.viget.com/articles/animated-ios-launch-screen/

 

Animate Your iOS Splash Screen | Viget

Learn how to animate iOS launch screens however you want!

www.viget.com

 

https://github.com/raywenderlich/swift-algorithm-club

https://github.com/morizotter/KeyboardObserver

 

GitHub - morizotter/KeyboardObserver: For less complicated keyboard event handling.

For less complicated keyboard event handling. Contribute to morizotter/KeyboardObserver development by creating an account on GitHub.

github.com

 

매번 Notification으로 받고 하는게 뭔가 안좋아보여서 참고할 오픈소스....

 

나중에 보자

https://xho95.github.io/swift/programming/language/grammar/2017/02/28/The-Swift-Programming-Language.html

 

Swift 5.5: Swift Programming Language (스위프트 프로그래밍 언어)

 

xho95.github.io

애플 공식 swift 5.5 문서를 번역하는 블로그.

'iOS > swift' 카테고리의 다른 글

메모. 스위프트 알고리즘  (0) 2022.01.12
KeyboardObserver~  (0) 2021.10.19
UIPickerView 의 텍스트 색상 변경하는 방법  (0) 2021.06.17
프로그래머스 - 프린터  (0) 2021.05.06
프로그래머스 - 기능개발  (0) 2021.05.05

pickerView는 label이나 button처럼 손쉽게 텍스트에 대한 접근을 할 수 없다.

생긴것부터가 배열이니 배열 전체에 대해 어떻게 해줄까를 정해줘야되서 그렇게 해둔듯 하다.

그러한 부분을 어떻게 할지를 정하는 함수가 pickerview에는 있다.

 

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?

 

라는 함수 인데

텍스트를 그냥 넣어 줄때 사용하는 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?

와 사용이 비슷하다.

 

아래는 빨간색으로 변경하는 예시를 플레이그라운드에서 만들어 보았다.

텍스트 설정을 변경하는 키값이 상당히 많은데 그중에서도

foregroundColor

를 사용했다.

 

위 소스를 플레이그라운드에서 돌리면 아래와 같이 나온다.

 

아래는 키들에 대한 애플문서이다.

https://developer.apple.com/documentation/foundation/nsattributedstring/key

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS > swift' 카테고리의 다른 글

KeyboardObserver~  (0) 2021.10.19
Guide Swift Programming Language 5.5  (0) 2021.10.01
프로그래머스 - 프린터  (0) 2021.05.06
프로그래머스 - 기능개발  (0) 2021.05.05
프로그래머스 - 모의고사  (0) 2021.05.04

+ Recent posts