스위프트 WebView, Segue, AppDelegate 데이터 공유
스위프트 [노트정리]
1. webView
WebView를 아웃렛 연결해서 변수로 만든 후 viewDidLoad()에서 url을 로드한다. 이때 url은 옵셔널이기 때문에 '언랩' 한 후 URLRequest() 함수에 전달하고 webView.loadRequest() 함수를 이용해서 웹 뷰를 띄울 수 있다.
http에 접속할 때는 보안 때문에 info.plist에서 App Transport Security Settings를 추가하고 Exception Domains에 웹페이지 주소값을 넣어준다.
2. 두 개의 화면 이동(Segue)
두 개의 화면을 이동할 때는 첫 번째 화면에서 두 번째 화면으로 넘어가는 이벤트가 발생하는 객체(버튼)를 우 클릭 한 후 두 번째 화면으로 드래그해서 Action Segue를 연결한다.
두 번째 화면에서는 앞에서 넘어가는 값을 받기 위한 변수를 선언한 후 화면이 열릴 때 호출되는 viewWillAppear() 함수에서 값을 받는다. 위 코드는 랜덤으로 생성된 RGB 값을 받아서 UIColor()의 인자로 전달한 후 RGB 색을 뽑아오는 내용이며 view의 백그라운드를 해당 색상 값으로 출력하는 내용이다.
첫 번째 화면에서는 RGB 세 개의 값을 랜덤으로 생성하고 있는데 이 역시 두 번째 화면으로 넘어갔다가 돌아오면 계속 랜덤하게 숫자가 생성되도록 하기 위해서 viewWillAppear() 함수에서 값을 만들어내고 있으며 여기서 랜덤하게 만들어진 숫자들이 두 번째 화면으로 전달되는데 이때 사용하는 녀석이 prepare()이다.
이 prepare()에서는 전환되는 화면에 있는 변수 colorR, colorG, colorB에 각각의 값을 대입하고 있는데 [segue.destination as! '두 번째 뷰 컨트롤러']로 캐스팅 한 후 접근해서 각각의 값을 대입하고 있으며 이 함수를 정의함으로써 다음 페이지에서 이쪽으로 다시 넘어올 수 있다.
3.AppDelegate 데이터 공유
두 개의 화면에서 서로 데이터를 전달하는 방법 중 AppDelegate의 변수를 이용하는 방법을 정리해놓는다. 예제에서는 두 개의 화면에서 각각의 textField에 입력한 값들을 저장하면 AppDelegate에 선언한 변수에 저장이 되며 그 값은 다른 화면에서도 똑같이 불러와서 확인할 수 있는 내용이다.
AppDelegate 클래스에 Int형 변수 aaa를 선언한 후 1234로 초기화를 했다. 두 개의 view에서는 이 값을 공유하게 되는데 앱을 실행하면 두 개의 textField 모두에 이 값이 출력되도록 해보자.
첫 번째 화면에서는 textField를 아웃렛 연결해서 변수를 생성한 후 UIApplication.shqrd.delegate as! AppDelegate를 이용해서 클래스를 가져온 후 화면이 열리는 순간 호출되는 viewWillAppear() 함수를 이용해서 textField에 해당 값을 출력하도록 하고 있다. 즉, 앱을 실행하면 AppDelegate에서 할당 한 1234가 출력될 것이다.
다음은 textFiled에 int형 숫자를 입력한 후 [데이터 저장하기] 버튼을 누르면 그 값이 AppDelegate의 aaa 변수에 저장이 되고 두 번째 화면에서도 역시 같은 값을 볼 수 있도록 내용을 정의해본다.
해당 버튼을 Action 아웃렛 연결을 한 후 해당 버튼을 누르면 숫자를 입력하면서 나왔던 키패드를 감추도록 했으며(resignFirstResponder) 만약 textField에 아무 값도 입력되지 않으면 nil이 올 수 있기 때문에 if let을 사용한 후 어떤 값이 입력됐더라고 AppDelegate에 선언한 변수가 int이기 때문에 캐스팅이 가능한지 알아보기 위해서 역시 if let으로 언랩 한 후 aaa에 해당 값을 저장하도록 하고 있다.
두 번째 화면도 똑같이 작성한 후 앱을 실행하면 처음에는 각각의 textField에 1234가 출력됐다가 어느쪽에서 건 임의의 숫자를 입력해서 저장하면 모든 곳에서 해당 값이 출력되는 걸 확인할 수 있다.
이렇게 해서 스위프트 기초 중에서 webview, segue, appDelegate를 이용한 데이터 공유에 대해서 기본 개념을 정리해봤다.