Skip to Content

Swift

Cocoa 用程式操控視窗 (下)

 

本篇要實作二個視窗,一個主視窗,一個子視窗,類似在 MS Window 開發程式時的 fmMain、fmOption 二個視窗。

重點在於主視窗可以開啟子視窗,子視窗可以關閉,但並不是像 Mac 的視窗那樣真的關閉,只是隱藏起來。當再次開啟副視窗時,則再次呈現,畫面中的內容也保持一樣。

同時也希望各視窗之間可以彼此操控對方的元件。

 

初步構想

 

  1. 先設定全域變數 vcMain 和 vcOption 來記錄二個視窗的 ViewController。

  2. 要開啟子視窗時,先判斷子視窗是否已經實作了?若無,則實作它,若已實作了則顯示它。

  3. 實作視窗後,記錄在全域變數中。

  4. 子視窗關閉時,採用隱藏方式。

  5. 利用全域變數去控制對方視窗的元件。

 

Cocoa 用程式操控視窗 (中)

Window 與 View 的生命周期

 

記錄一下自己測試的順序,這也是為什麼在 ViewController 中要設定 Window 的代理不能在第一個 viewDidLoad 之後做,因為此時 window 還沒有 windowDidLoad。要等到 viewWillAppear 時才能設定 window 的代理。

  • viewDidLoad
  • windowDidLoad
  • viewWillAppear
  • viewDidAppear
  • viewWillLayout
  • viewDidLayout
  • viewWillLayout
  • viewDidLayout
  • ------------------
  • windowShouldClose
  • windowWillClose
  • viewWillDisappear
  • viewDidDisappear

 

Cocoa 用程式操控視窗 (上)

 

在這系列【Xcode 用 Storyboard 開發程式記錄】已經學會了建立視窗與畫面,開啟視窗,以及為元件寫簡單程式。

底下這一系列就要學習如何用程式來開啟視窗,以及跨視窗操作視窗和元件等各種功能,最後再實作一個總複習,讓視窗與元件的控制可以自在無礙,這也是未來設計 CBReader Mac 版的的前測試。

 

Xcode 用 Storyboard 開發程式記錄 (4/4)

 

在獨立檔案建立共用物件

這個階段要建立一個共用物件,例如程式的設定資料,我希望在一個獨立的檔案建立 CSetting 類別,產生 Setting 物件,然後在第二個視窗去修改設定內容,並且在第一個視窗可以取得修改過的資料。

同樣建立新檔,這次不是視窗,所以選空白的 Swift File。

Xcode 用 Storyboard 開發程式記錄 (3/4)

 

建立第二視窗

接著要設計開啟第二個視窗的功能。

首先打開元件列表,將 View Controller 拉到設計畫面,也就是藍框的位置,那就是第二個視窗。

Xcode 用 Storyboard 開發程式記錄 (2/4)

設計畫面

現在要在畫面上加一些元件。

先按下右上角紅框的+號,會出現元件列表,把一個 Push Button 拉到畫面的 View 中。

Xcode 用 Storyboard 開發程式記錄 (1/4)

這一篇算是自己初學 Xcode + Storyboard 的記錄,想要了解檔案、視窗之間彼此的關係。

Mac 最新推出的是 SwiftUI 框架,但它必須要最新的 macOS 10.15 Catalina 才能執行,而且參考資料不多,所以我還是先學習 Storyboard。

以下記錄是自己查詢及摸索來的,主要目標是讓程式可以執行,並不一定是正確的或最好的,也許解釋上還有錯誤,參考時請小心。

WebKit View 在 Xcode 上的問題

執行環境:MacBook Pro + macOS Mojava 10.14.5 + Xcode 10.2.1

事情是這樣的,我用 Xcode 製作一個單純的 App,只是放入一個 WebKit View 元件(底下簡稱 WKWebView ),在 Xcode 上執行並沒問題。

如下圖,白框是 WKWebView 元件,左邊的 Windows 是執行的畫面。

然而,我想直接執行 Build 出來的 App,問題就來了。

如下圖,我先選紅圈 ①,在藍圈 ② 可以看到 App 的位置,點下之後就可以看到綠圈 ③ 的 App 檔案,直接執行它,就看到黃圈 ④ 的錯誤報告。

 

我測試過其他簡單的元件如 Label、Button 則沒有這個問題,就 WKWebView 才會如此。

訂閱文章


about seo