人生海海
Mac App 在使用 Storyboard 設計畫面時,預設是有一個主要的 Storyboard,裡面可以放置很多個 View,然而畫面一多,處理起來也是麻煩,本文是介紹如何使用多個 Storyboard,以及如何將原有的 Storyboard 分割。
底下是示範操作。
首先,先做出第一個視窗。
接著,依傳統的方式,加入 View Controller 當做第二個視窗。
加入後,並在第一視窗的按鈕連上第二視窗,用來開啟第二視窗。
測試執行,果然可以順利開啟第二視窗。
這是一個標準的 Column 設計。
首先把紅色的部份移除,換成 CheckBox,如下圖。
註:其實還有一種方法,就是不移除 Table Cell View,只移除 Table View Cell,然後用 CheckBox 取代 Table View Cell。底下程式也會需要修改。
然後設定 CheckBox 的 Identifier,本例為 tableCheck。
經過這兩篇「NSOutlineView 使用程式呈現樹狀資料」、「Mac Cocoa NSOutlineView 資料綁定」的練習,這次直接處理 NSTableView,果然駕輕就熟,稍為查一些資料,很快就做出成果了,畢竟它比 NSOutlineView 簡單,基本架構都差不多。
這篇就不談太多細節,只把重點記錄下來。
先由資料綁定做起。
TableView 是表格狀的資料,所以就用藏經目錄的結構來處理,底下只有三個欄位,ID、經名與作譯者。
宣告 catalog 變數,它是 Catalog 物件的陣列,底下建立了三筆資料。
本篇要實作二個視窗,一個主視窗,一個子視窗,類似在 MS Window 開發程式時的 fmMain、fmOption 二個視窗。
重點在於主視窗可以開啟子視窗,子視窗可以關閉,但並不是像 Mac 的視窗那樣真的關閉,只是隱藏起來。當再次開啟副視窗時,則再次呈現,畫面中的內容也保持一樣。
同時也希望各視窗之間可以彼此操控對方的元件。
先設定全域變數 vcMain 和 vcOption 來記錄二個視窗的 ViewController。
要開啟子視窗時,先判斷子視窗是否已經實作了?若無,則實作它,若已實作了則顯示它。
實作視窗後,記錄在全域變數中。
子視窗關閉時,採用隱藏方式。
利用全域變數去控制對方視窗的元件。
在這系列【Xcode 用 Storyboard 開發程式記錄】已經學會了建立視窗與畫面,開啟視窗,以及為元件寫簡單程式。
底下這一系列就要學習如何用程式來開啟視窗,以及跨視窗操作視窗和元件等各種功能,最後再實作一個總複習,讓視窗與元件的控制可以自在無礙,這也是未來設計 CBReader Mac 版的的前測試。
這個階段要建立一個共用物件,例如程式的設定資料,我希望在一個獨立的檔案建立 CSetting 類別,產生 Setting 物件,然後在第二個視窗去修改設定內容,並且在第一個視窗可以取得修改過的資料。
同樣建立新檔,這次不是視窗,所以選空白的 Swift File。
接著要設計開啟第二個視窗的功能。
首先打開元件列表,將 View Controller 拉到設計畫面,也就是藍框的位置,那就是第二個視窗。
現在要在畫面上加一些元件。
先按下右上角紅框的+號,會出現元件列表,把一個 Push Button 拉到畫面的 View 中。
這一篇算是自己初學 Xcode + Storyboard 的記錄,想要了解檔案、視窗之間彼此的關係。
Mac 最新推出的是 SwiftUI 框架,但它必須要最新的 macOS 10.15 Catalina 才能執行,而且參考資料不多,所以我還是先學習 Storyboard。
以下記錄是自己查詢及摸索來的,主要目標是讓程式可以執行,並不一定是正確的或最好的,也許解釋上還有錯誤,參考時請小心。