《成为大前端》系列 - 3. 基础开发和WebView加载网页(iOS)

2,339 阅读3分钟

3.1 创建项目

3.1.1 准备工作

  • 至少略微学习一下 Swift
  • 需要苹果电脑,并且下载安装 XCode(Mac AppStore)
  • 至少准备一个 iOS 手机用于运行,否则只能使用模拟器

3.1.2 创建 iOS 项目

打开 XCode,选择 Create a new XCode project:

选择 Single View App,然后 Next:

填写项目参数:

3.1.3 项目结构

3.2 基础开发介绍

iOS开发的知识非常多,这里不做过多的讲述,目前先了解以下几点:

  • UIApplication和UIApplicationDelegate
  • 关键组件的关系
  • UIViewController的生命周期
  • RootView视图根节点

3.2.1 UIApplication与AppDelegate

App启动会创建一个UIApplication,UIApplication会调用AppDelegate的生命周期方法,比如:

  • willFinishLaunchingWithOptions: 即将启动app
  • didFinishLaunchingWithOptions: 启动了app,很多初始化的代码通常写在这里
  • applicationDidBecomeActive:App恢复活动,比如从App管理屏回来
  • applicationWillResignActive:App暂停活动,比如上划去到App管理屏
  • applicationDidEnterBackground:App进入后台
  • applicationWillEnterForeground:App即将回答前台
  • applicationWillTerminate:App即将终止,比如被杀

通过didFinishLaunchingWithOptions我们可以建立UIWindow,和建立第一个UIViewController,然后 调用UIViewController的生命周期,然后就是初始化视图

3.2.2 关键组件的关系

UIWindow以树状的结构包含了App的所有UIView

UIViewController即控制UIView的逻辑部分,像MVC模式的C,同时也包含iOS平台特性的生命周期和相关功能

UIView则是指各种控件,所有控件都最终继承自UIView这个类

3.2.3 UIViewController

UIViewController 类是 iOS 应用的关键组件,对于前端来说,打开一个UIViewController可以认为是 使用window.open或者是点击 <a> 标签打开一个新的页面,只不过它还包含iOS特性的功能。

UIViewController的生命周期

目前先了解以下生命周期方法即可

  • loadView: view创建代码写在这里
  • viewDidLoad:view加载完毕,view的操作在这
  • viewWillAppear:view即将出现,还未渲染在屏幕上
  • viewDidAppear: view已经出现,已经渲染在屏幕上
  • viewWillDisappear:view即将消失
  • viewDidDisappear:view已经消失

RootView

每一个UIViewController都有一个根节点:

class ViewController: UIViewController {
    override func loadView() {
        // 可以通过self.view访问根节点,根节点默认大小是全屏的
        self.view = UIView()

        // 可以通过self.view.addSubView添加子view
        let label = UILabel()
        label.text = "Hello world"
        self.view.addSubview(label)
    }

    override func viewDidLoad() {
        print(self.view)
    }
}

3.2.4 iOS布局

每一个控件都有自己的布局属性,这里列举两个了解一下:

  • frame: 它包含x/y/width/height,代表UI的位置和尺寸
  • margin:代表了自己和其他组件的距离

3.2.5 扩展阅读

3.3 WebView加载网页

3.3.1 ViewController代码编写

import UIKit
// 引入iOS的WebKit库
import WebKit

class ViewController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 创建WebView,先不用理解Configuration
        let config = WKWebViewConfiguration()
        webView = WKWebView(frame: self.view.frame, configuration: config)
        webView.uiDelegate = self
        self.view.addSubview(webView)

        // 加载百度页面
        let url = URL(string:"https://www.baidu.com")!
        let request = URLRequest(url: url)
        webView.load(request)
    }
}

3.3.2 运行

选择一个模拟器运行,模拟器启动需要几分钟时间,你也可以使用真机测试。

效果图:

到这就完成了 WebView 加载网页。

3.3.3 iOS 真机运行需要签名的问题

将 App 运行到真机时,有可能面临这个错误:

Signing for "xxx" requires a development team. Select a development team in the Signing & Capabilities editor. (in target 'xxx' from project 'xxx')

如图:

解决方法:需要 xcode 登录一个苹果账号,可以使用你真机的苹果账号

  1. 按如图步骤选中

  1. 点击红框处

  1. Add an Account

  1. 点击加号,登录你的苹果账号

  1. 等待 XCode 自己修复

  1. 运行 App 后输入电脑的开机密码,点击始终允许

  1. 项目安装至手机后,打开手机设置 => 通用 => 描述文件与设备管理,可以看到刚刚添加的苹果账号,点击信任此开发者APP账号,至此设置完成

如果出现其他意外问题,可优先通过 Google 解决或评论留言