---
# System prepended metadata

title: 學習日誌 - Day1 (2019/7/18)

---

# 學習日誌 - Day1 (2019/7/18)

###	預計完成
- [x] ==1== UIWebView
- [x] ==2== 建立Line機器人 我的Line Bot ID: @120fwetj
- [ ] ==3== 建立Slack機器人 (建立完成但就是無法online)
- [x] ==4== 每日跑三公里 ![](https://i.imgur.com/bYfSS4J.jpg)


## UIWebView
```gherkin=
//
//  ViewController.swift
//  ExUIWebView
//
//  Created by Milo on 2019/7/17.
//  Copyright © 2019 MUB. All rights reserved.
//

import WebKit //如果要使用WKWebView需要import WebKit, 而非預設的UIKit

class ViewController: UIViewController, UITextFieldDelegate { // 需加入UITextFieldDelegate如此在輸入時才會觸發事件

    var myTextField = UITextField()
    var myWebView = WKWebView() //iOS12之後WKWebView取代UIWebView，iOS12之後也無法在使用UIWebView
    var myActivityIndicator = UIActivityIndicatorView()
    let fullScreenSize = UIScreen.main.bounds.size

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.black //將背景設為黑色

        //建立五個Button分別為back, forward, reload, stop, go
        var myButton = UIButton()
        myButton.frame = CGRect(x: 0, y: 20, width: 50, height: 50)
        myButton.setTitle("<", for: .normal)
        myButton.titleLabel?.font = .systemFont(ofSize: 50)
        myButton.setTitleColor(UIColor.white , for: .normal)
        myButton.addTarget(self, action: #selector(ViewController.back), for: .touchUpInside)
        myButton.center = CGPoint(x: fullScreenSize.width * 0.1, y: fullScreenSize.height * 0.05)
        view.addSubview(myButton)
        
        myButton = UIButton()
        myButton.frame = CGRect(x: 0, y: 20, width: 50, height: 50)
        myButton.setTitle(">", for: .normal)
        myButton.titleLabel?.font = .systemFont(ofSize: 50)
        myButton.setTitleColor(UIColor.white , for: .normal)
        myButton.addTarget(self, action: #selector(ViewController.forward), for: .touchUpInside)
        myButton.center = CGPoint(x: fullScreenSize.width * 0.3, y: fullScreenSize.height * 0.05)
        view.addSubview(myButton)
        
        myButton = UIButton()
        myButton.frame = CGRect(x: 0, y: 20, width: 50, height: 50)
        myButton.setTitle("◎", for: .normal)
        myButton.titleLabel?.font = .systemFont(ofSize: 50)
        myButton.setTitleColor(UIColor.white , for: .normal)
        myButton.addTarget(self, action: #selector(ViewController.reload), for: .touchUpInside)
        myButton.center = CGPoint(x: fullScreenSize.width * 0.5, y: fullScreenSize.height * 0.05)
        view.addSubview(myButton)
        
        myButton = UIButton()
        myButton.frame = CGRect(x: 0, y: 20, width: 50, height: 50)
        myButton.setTitle("■", for: .normal)
        myButton.titleLabel?.font = .systemFont(ofSize: 50)
        myButton.setTitleColor(UIColor.white , for: .normal)
        myButton.addTarget(self, action: #selector(ViewController.stop), for: .touchUpInside)
        myButton.center = CGPoint(x: fullScreenSize.width * 0.7, y: fullScreenSize.height * 0.05)
        view.addSubview(myButton)
        
        myButton = UIButton()
        myButton.frame = CGRect(x: 0, y: 20, width: 100, height: 100)
        myButton.setTitle("Go", for: .normal)
        myButton.titleLabel?.font = .systemFont(ofSize: 50)
        myButton.setTitleColor(UIColor.white , for: .normal)
        myButton.addTarget(self, action: #selector(ViewController.go), for: .touchUpInside)
        myButton.center = CGPoint(x: fullScreenSize.width * 0.9, y: fullScreenSize.height * 0.05)
        view.addSubview(myButton)
        
        //建立TextField
        myTextField.frame = CGRect(x: 0, y: 0, width: fullScreenSize.width, height: 40)
        myTextField.center = CGPoint(x: fullScreenSize.width * 0.5, y: fullScreenSize.height * 0.015)
        myTextField.text = "https://www.google.com" //預設文字內容在這裡也是同時首頁的設定
        myTextField.backgroundColor = UIColor(red: 0.9, green: 0.9, blue: 0.9, alpha: 1)
        myTextField.clearButtonMode = .whileEditing //clearButtonMode是myTextField裡的清除按鈕，若沒有特別顯示則不會出現，whileEditing則是在編輯時才會出現(x)的符號
        myTextField.returnKeyType = .default //.returnKeyType是改變return鍵的預設樣式，如改為join就會將原本default顯示為灰色底的return轉換為藍色底的join, 但像google,yahoo都會變成變成Search, 不像developer.apple.com/documentation/uikit/uireturnkeytype所寫會變成yahoo, google樣式
        myTextField.delegate = self //delegate委任 設為self就是ViewController本身
        
        //建立WKWebView
        myWebView.frame = CGRect(x: 0, y: 0, width: fullScreenSize.width * 1, height: fullScreenSize.height * 0.9)
        myWebView.center = CGPoint(x: fullScreenSize.width * 0.5, y: fullScreenSize.height * 0.549)
//        myWebView.navigationDelegate = self
        view.addSubview(myWebView)
        
        //建立環狀進度條
        myActivityIndicator = UIActivityIndicatorView(style: .gray) //將讀取條設為淺灰色
        myActivityIndicator.color = UIColor.red
        myActivityIndicator.center = CGPoint(x: fullScreenSize.width * 0.5, y: fullScreenSize.height * 0.5)
        self.view.addSubview(myActivityIndicator)
        
        myWebView.addSubview(myTextField) //在myWebView下新增一個subView, 也就是說myTextField是myWebView的superView，myWebView的superview是myTextField
        self.go()
    }
    
    @objc func back(){
        myWebView.goBack() //上一頁功能
    }
    @objc func forward(){
        myWebView.goForward() //下一頁功能
    }
    @objc func reload(){
        myWebView.reload() //重新讀取功能
    }
    @objc func stop(){
        myWebView.stopLoading() //停止功能
//        myActivityIndicator.stopAnimating()
    }
    @objc func go(){
        self.view.endEditing(true)
        let url = URL(string: myTextField.text!) //因為.text本身是String? 所以需要解包才能將值指派給url
            if url != nil{ //因為url是optional所以如果把網址列弄成空白送出會造成程式Crash, 所以透過if檢查是否為nil值
        let urlRequest = URLRequest(url: url!)
        myWebView.load(urlRequest) //urlRequest設定取得的值是www.google.com, 因此WebView.load載入時會先跑到google首頁
            }
            else{
                myTextField.text = "請輸入網址"
            }
    }
    func textFieldShouldReturn(_ textField:UITextField) -> Bool{
        self.go()
        self.view.endEditing(true) //按下return鍵之後鍵盤就會自動收回
        return true
    }
    
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!){
        myActivityIndicator.startAnimating()
    }
    
    func webView(_ vewView:WKWebView, didFinish navigation: WKNavigation!){
        myActivityIndicator.stopAnimating()

        if let currentURL = myWebView.url{
            myTextField.text = currentURL.absoluteString
        }
    }

}



```
