-->

Mac

[macOS] テーブルビューを使ってみる。(1)では、Cell Basedでやったんだが、View Basedでやってみる。

[macOS] テーブルビューを使ってみる。(1)と同じようにやっていく。

違うところは、
ViewControllerクラスにNSTableViewDataSourceプロトコルとNSTableViewDelegateプロトコルを追加する。

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?

の代わりに

func tableView(_ tableView: NSTableView,  viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?

を実装する。

    // 表示するデータをセットしたViewを返す。
    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let cell = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as! NSTableCellView
        if let tcol = tableColumn {
            if(tcol.identifier == "Name") {
                cell.textField?.stringValue = datas[row].name
            } else if(tcol.identifier == "Age") {
                cell.textField?.stringValue = "\(datas[row].age)"
            }
        }
        return cell
    }

TableViewのContent ModeをView Basedにする。
TableViewのdelegateもView Controllerに接続する。

こんなところだ。



このエントリーをはてなブックマークに追加

iOSの[iOS] 画面遷移(値を渡す)と基本的に同じだ。Cocoa Touch Classで新規にファイルを作る代わりにCocoa Classで作るのとUIViewControllerのところをNSViewControllerと読み替えて同じようにする。

ViewController2.swiftはこんな感じだ。

import Cocoa

class ViewController2: NSViewController {
    @IBOutlet weak var label: NSTextField!
    
    var message = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        label.stringValue = message
    }
    
}

ViewControllerクラスに追加するコードはこんな感じだ。

    override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        let viewController2 = segue.destinationController as! ViewController2
        viewController2.message = "PAGE2"
    }


このエントリーをはてなブックマークに追加

[macOS] 画面遷移(というか別の画面を出す)の続きでページ2のウインドウを閉じれるようにしようと思う。

ストーリボードを開いてページ2にボタンをはっ付ける。
ページ2のボタンをctrlキーを押しながらページ2の上の方にあるView Controllerのアイコンにドラッグ&ドロップする。表示されるポップアップメニューでdismissControllerを選ぶ。

001

これで実行してページ2を表示、ボタンを押すとページ2が閉じる。(Modal、Sheet、Popoverのとき。Showのときは閉じない)


このエントリーをはてなブックマークに追加

新規プロジェクトを作って最初の画面にラベル(ページ1)、別の画面に遷移するためのボタンを貼っておく。
ボタンを押した時の画面を追加する。ストーリボードでView Controllerをドラッグ&ドロップする。

001

追加した画面にラベル(ページ2)を貼っておく。

ページ1に貼ったボタンをctrlキーを押しながらページ2へドラッグ&ドロップする。表示されるポップアップメニューでModalを選ぶ。

002

これで実行し、ボタンを押すとページ2が表示される。モーダルなのでページ1のウインドウはページ2のウインドウを閉じるまで押せなくなる。

さて、ポップアップメニューでModal以外を選んだらどうなるかだ。

Show
ボタンを押すとページ2のウインドウが表示される。Showの場合、ページ1を選んでボタンなども押せる状態でページ2が表示される。このとき、ページ1のボタンを何回も押すとどんどんページ2のウインドウが表示される。

Popover
こんな表示になる。

003

Custom
とりあえず、パスw

Sheet
こんな表示になる。このままだと強制終了するしかない。

004

このエントリーをはてなブックマークに追加

UserDefaultsを使って、キーと値で設定して保存したり、キーで設定した値を読み込んだりする。

設定はこんな感じ。

        // UserDefaultsのインスタンスを取得する。
        let def = UserDefaults.standard
        
        // defに値をセットする。
        def.set("山田太郎", forKey: "Name")
        def.set(22, forKey: "Age")
        
        // defを保存する。
        def.synchronize();

値の読み込みはこんな感じ

        // UserDefaultsのインスタンスを取得する。
        let def = UserDefaults.standard
        
        // defから値を取得する。
        let name = def.string(forKey: "Name")
        let age = def.integer(forKey: "Age")
        
        // 表示する。
        print("\(name!):\(age)")

StringとInt以外にもあるんでAppleのリファレンス(UserDefaults)を参照しよう。




このエントリーをはてなブックマークに追加

↑このページのトップヘ