728x90
반응형

TextField 는 아이디나 비밀번호 입력을 받을때 사용하고

 

TextView는 HTML의 TextArea처럼 긴 글을 입력 받을 때 사용합니다.

 

 

 

 

TextField와 SearchBar는 입력을 한줄로 받기 때문에 PlaceHolder를 설정하여 입력설명을 적을수 있지만.

 

TextView는 별도의 기능을 지원하지 않습니다.

 

 

 

 

그래서 UITextViewDelegate를 준수해서 커스텀을 해야 PlaceHolder 처럼 구현을 할 수 있습니다.

 

Storyboard에서 TextView를 마우스 우클릭해서 컨트롤러에 연결하고 Delegate를 선택해도 되고.

 

override func viewDidLoad() {
    textView.delegate = self
}

 

 

위 처럼 소스 코드로 나 자신이 UITextViewDelegate를 준수하고 있다고 설정해줘도 됩니다.

extension MainViewController: UITextViewDelegate {
    
    // 편집이 시작될때
    func textViewDidBeginEditing(_ textView: UITextView) {
        textViewSetupView()
    }
    
    // 편집이 종료될때
    func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text == "" {
            textViewSetupView()
        }
    }
    
    // 텍스트가 입력될때
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        // 개행시 최초 응답자 제거
        if text == "\n" {
            textView.resignFirstResponder()
        }
        return true
    }
}
 

 

 

 

 

편집이 시작될 때와 종료 되었을대 textViewSetupView 함수를 호출하도록 하였습니다.

 

현재 텍스트가 '내용입력' 이면 내용을 지우고 입력받을 수 있도록 글씨 색도 검정으로 바꿔주었고,

 

내용이 비어있을때에는 PlaceHolder 처럼 글씨는 회색으로 변경하고 '내용입력'을 넣어주었습니다.

// UITextView PlaceHolder 설정
    func textViewSetupView() {
        if textView.text == "내용입력" {
            textView.text = ""
            textView.textColor = UIColor.black
            
        } else if textView.text == "" {
            textView.text = "내용입력"
            textView.textColor = UIColor.lightGray
        }
    }

 

 

 

 

 

 

텍스트가 바뀔때에는 개행인지 판단하여 응답자를 없애줘서 포커스를 지워줍니다.

 

그러면 키보드도 자동으로 내려갑니다.

 

위와 같이 간단하게 TextView도 PlaceHolder처럼 커스텀해서 사용할 수 있습니다.

 

728x90
반응형

'프로그래밍 > iOS' 카테고리의 다른 글

Swift 4 UIRefreshControl  (0) 2019.03.04
Swift 4 TableViewCell SwipeAction  (0) 2019.02.21
Swift 4 WKWebView 로딩(Indicator)  (0) 2019.02.20
Swift 4 WKWebView  (0) 2019.02.20
Swift 4 TableView 이미지 비동기 처리  (0) 2019.02.20
728x90
반응형

webView.load() 만 실행한다고 해서 WebView 구성이 끝일까요?


사용자는 이 화면이 아직 조회되고 있는지 알아야 합니다.


화면이 오류로 멈춰있는데 언제까지 기다릴수도 없는일 입니다.






iOS에서는 화면의 로딩 중이라는것을 보여주도록 UIActivityIndicatorView를 지원하고 있습니다.





Indicator를 구성하여 웹뷰를 완성해보겠습니다.


    @IBOutlet weak var indicator: UIActivityIndicatorView!
cs


Storyboard에서 Indicator뷰를 생성하고 IBOutlet 변수로 정의합니다.





그리고 WKWebView가 로딩을 시작할 때와, 로딩이 끝날때, 오류일때를 각 함수를 호출해주는 Delegate를 준수하면됩니다.


    webView.navigationDelegate = self
cs


extension MainViewController: WKNavigationDelegate {
 
    // 로드 시작
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: KNavigation!) {
    
    }
 
    // 로드 종료
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
 
    }
 
    // 로드 오류
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        
    }
}
cs


extension이라는 확장 키워드를 통해 WKNavigationDelegate 를 구현하는 함수를 따로 나눠 작성했습니다.


webview의 navigationDelegate를 나 자신으로 정하면 특정 행동을 취했을때 구현한 함수를 호출해줍니다.


WKNavigationDelegate를 준수하면 웹뷰의 많은 콜백 함수들을 사용할 수 있지만 몇가지만 구현해 보았습니다.






Activity Indicator View -> Behavior 


Animating 을 체크하면 indicator가 움직이게 된됩니다.


Hides When Stopped 를 체크하면 indicator가 멈출때 화면에서 감춰줍니다.







indicator.startAnimating()    // indicator가 움직인다.

indicator.stopAnimating()    // indicator가 멈춘다.


필요에 맞게 indicator함수를 호출하면 됩니다.

728x90
반응형

'프로그래밍 > iOS' 카테고리의 다른 글

Swift 4 TableViewCell SwipeAction  (0) 2019.02.21
Swift 4 TextView PlaceHolder  (0) 2019.02.21
Swift 4 WKWebView  (0) 2019.02.20
Swift 4 TableView 이미지 비동기 처리  (0) 2019.02.20
Swift 4 TableView 이미지 메모이제이션 기법  (0) 2019.02.20
728x90
반응형

iOS 8 이상의 앱에서는 UIWebView 사용보단


WKWebView를 사용하라고 문서에 나와있습니다.






장단점이 있겠지만 WKWebView를 사용하는 방법을 정리 하려고 합니다.


기존과 비슷하게 Storyboard의 Library 에서 WebKit View 로 구성하면 됩니다.







    import WebKit
cs


Swift 에서는 위와 같이 import작업이 필요합니다.


Storyboard의 WebKit View를 @IBOutLet 변수로 정의 합니다.



    let url = URL(string: "URL주소")
    let request = URLRequest(url: url)
    webView.load(request)
cs


URL에 원하는 URL주소를 넣고 URLRequest로 변환해준다음


webView.load() 함수를 사용하면 끝입니다.


정말 간단하게 웹뷰를 활용한 앱을 만들수 있습니다.


728x90
반응형

+ Recent posts