적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

Swift iOS 앱 개발/Swift 85

[Swift iOS] WKNavigationDelegate 하이브리드 앱에서 webview 탐색 및 관리

WKNavigationDelegate : Methods for accepting or rejecting navigation changes, and for tracking the progress of navigation requests. 웹뷰에서 일어나는 변경 사항들을 감지하고 제어할 수 있는 프로토콜. 특정 링크에서의 작동을 제한하거나 진행 상황을 추적하는 등의 기능을 수행할 수 있다. WebViewController에 WKNavigationDelegate 프로토콜을 추가해주면 다음 메서드들을 사용하여 웹뷰 페이지 탐색 및 이동을 제어할 수 있다. webview.navigationDelegate = self 로 대리자 위임해주는 것을 잊지말 것! 1. decidePolicyFor navigationAct..

[Swift iOS] Convert number into money format with a comma (feat. NumberFormatter 숫자 콤마 표시)

NumberFormatter : 숫자 값과 텍스트 사이를 변환하는 formatter 숫자 / 금액에 자동으로 쉽표를 추가해주는 formatter가 있는 지 몰랐던 5개월 전의 나는 귀엽게도 다음과 같은 코드로 가격에 쉼표를 표시해주었다. 😆 let price = UILabel() var priceArray = Array("50000") if priceArray.count == 4 { priceArray.insert(",", at: 1) } else if priceArray.count == 5 { priceArray.insert(",", at: 2) } price.text = String(priceArray) // "50,000" 숫자가 4개면 두번째 자리에 쉼표를, 5개면 세번째 자리에 쉼표를 추가해준다..

[Swift iOS] webview 로딩 완료 감지 (feat. WKNavigationDelegate)

didFinish navigation 으로 페이지 로딩 완료를 감지할 수 있다. 다음과 같이 실행해줄 경우, 새로운 페이지가 로딩될 때마다 url 로딩 완료 로그를 확인할 수 있다. func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { let url = webView.url?.absoluteString print("로딩완료 : \(url)") } 참고 : LaValse - WKNavigationDelegate, wkwebview 로딩완료감지,

[Swift iOS] 키보드가 textField를 가릴 때 해결법

textField 를 사용할 때, 키보드에 의해 textField가 가려지는 경우가 있다. 이러한 경우 NotificationCenter를 이용해서 키보드의 상태를 받아와, 키보드가 올라가면 잠시 textField 입력 창을 올렸다가 내려갈 때 다시 원래대로 내리면 된다. override func viewDidLoad() { super.viewDidLoad() textField.delegate = self NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.d..

[Swift iOS] NotificationCenter & Observer

NotificationCenter에 등록된 이벤트가 발생하면 해당 이벤트들에 대한 행동을 취하는 것. 앱 내에서 아무데서나 메시지를 던지면 앱 내의 아무데서나 이 메시지를 받을 수 있게 해 주는 것이 NSNotificationCenter의 역할. post 옵저버에게 전달할 값을 전송해주는 부분 NotificationCenter.default.post(name: Notification.Name("이벤트이름"), object: 전달할값) Add Observer Notification.Name("")을 탐지하고 있다가 해당 이름으로 notification이 전송되면 수행하는 부분. NotificationCenter.default.addObserver(self, selector: #selector(호출할함수),..

[Swift iOS] WKWebView url 변경 감지

하이브리드 앱에서 웹뷰 사용시, 새로운 페이지가 로딩될 때마다 이를 감지하고 변경된 url을 받아오는 법을 알아보자. url 변경을 감지하기 위해서는 다음 두가지 방법을 사용할 수 있다. 1. webView:decidePolicyForNavigationAction:decisionHandler:에서 navigationAction으로 받아오는 법 2. webView에 observer를 통해 url로 들어오는 값을 살펴보는 법. 첫번째가 좀 더 간단하고 쉬워보여 첫번째 navigationAction으로 받아오는 법을 사용해보았다. func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHand..

[Swift iOS] 한글 포함된 URL 인코딩하는 법 + url 디코딩

한글이 포함된 url string으로 URL 컨버팅을 해줄 경우, nil 값이 반환되는 문제가 발생했다. URL의 string: 은 영문, 숫자와 특정 문자만 인식 가능하고, 한글, 띄어쓰기 등은 인식하지 못한다고 한다. 따라서 한글이 포함되어있는 url String을 따로 인코딩해주는 작업이 필요하다. let urlStr = "http://홍썹.kr" let encodedStr = urlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! let url = URL(string: encodedStr)! CharcteterSet types for URL Encoding 애플문서 참고 서버에서 url의 파라미터로 값을 받아오는 경우도 있는데..

[Swift iOS] AutoSlide Banner using UICollectionView

UICollectionView를 이용해 AutoSlideBanner를 만들어보려고 했는데 시작부터 난관에 부딪혀버렸다.. 찾아보니 xib 파일에서는 UICollectionView 안에 셀을 추가하는 것이 지원이 안된다나 뭐라나.. 하고 싶으면 따로 UICollectionViewCell xib 파일을 만들어주거나, 스토리보드를 이용해야한다고 한다.. Adding cells in a xib is not supported. If you must use a xib file, then you will need a separate xib which contains the UICollectionView cell. Storyboards may be a better solution. https://newbedev.com..

[Swift iOS] UIScrollView

UIScrollView 이 까다로운 자식... 첫번 째 관문.. View 위에 Scroll View를 추가하고 Constraints를 주면 빨간 경고가 뜬다. 이거는 오른쪽 상단 Size inspector의 Content Layout Guides를 체크 해제해주면 해결 가눙 두번째 관문... 아니 UIScrollView 안에 view.frame.width로 UIView를 여러개 만들어 차례대로 슬라이드 하려고 했는데 이상하게 크기가 남는 것이 아닌가!! 크기가 안맞고 이상하게 슬라이드가 되어 진짜 이거 때매 개빡쳤다. 쓸데없이 시간이 엄청 오래 걸렸다. 도대체 왜 ????? Attribute Inspector에서 Autoresize Subviews 체크 해제 해주니깐 잘 되더라.. 왜 니맘대로 크기 조절..

[Swift iOS] How to use Multiple targets with CocoaPods

타겟이 여러개인 프로젝트에서 CocoaPods를 사용해 라이브러리들을 설치해야할 경우 어떻게 하면 될까? use_frameworks! def sharepods pod 'Firebase/Messaging' end target 'MainProject' do sharepods pod 'Firebase/Anylytics' pod 'Alamofire' end target 'Extension' do sharepods end 이런 식으로 Podfile 안에서 함께 쓰는 것들을 먼저 정의해준 후 각 타겟에 추가해주고 각 타겟이 추가로 필요한 라이브러리들을 따로 더 추가해주면 된다. 참고 : https://stackoverflow.com/questions/14906534/how-do-i-specify-multiple-t..

728x90
반응형