WebKit
의 이벤트가 발생했을 때 Delegation
을 사용하여 ViewController
에 전송하여 이에 대해 조치를 취할 수 있었습니다.UIAlertController
에 ActionSheet
스타일로 지정하는 방법도 알아보았습니다.toolbarItems
안에 UIBarButtonItems
를 배치하여 표시한 후 .flexibleSpace
를 사용하여 레이아웃을 보기좋게 설정했습니다.Key-Value-Observing
을 사용하여 웹브라우저에 로딩상황을 표시할 수 있었습니다.contentsOf
를 사용하여 디스크에서 텍스트파일을 로드하는 방법을 알아보았습니다.UIAlertController
에 텍스트필드를 추가하여 읽고 사용할 수 있습니다.contains(), remove(at:), firstIndex(of:)
AutoLayout
, Visual Format Language
웹뷰 설정
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
}
viewDidLoad()
가 아닌 loadView()
뷰가 로드가 완료되기전에 정의합니다.view
가 WKWebView
이기 때문 view.reload()
는 사용할 수 없습니다. 왜냐하면 UIView
가 아니기 때문입니다.if let과 try?
var allWords = [String]()
if let startWordsURL = Bundle.main.url(forResource: "start", withExtension: "txt") {
if let startWords = try? String(contentsOf: startWordsURL) {
allWords = startWords.components(separatedBy: "\n")
}
}
contentsOf
로 디스크에서 텍스트를 로드할 수 있습니다. 위 코드에서 텍스트를 얻을 수 있지만 실패한 경우 throw
로 예외처리를 해야합니다.
try?
는 예외처리를 nil반환을 합니다.
VFL
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat:"V:|[label1(labelHeight)]-[label2(labelHeight)]-[label3(labelHeight)]-[label4(labelHeight)]-[label5(labelHeight)]->=10-|", options: [], metrics: metrics, views: viewsDictionary))
도전과제
테이블뷰로 쇼핑목록을 만들 수 있도록 하는 앱
쇼핑목록을 지울 수 있는 왼쪽 UIBarButtonItem 추가 → 테이블뷰 셀단위로 다시 로드
joined(separator:_)
: 배열에서 각 부분들을 결합하여 하나의 문자열을 생성할 수 있습니다.