-->

2017年01月

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

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

Windows 10 UWP アプリのライフサイクル
このエントリーをはてなブックマークに追加

新規にUWPのプロジェクトを作成し、ボタンをはっ付けてクリックイベントを用意しとく。このボタンをクリックするとHTTP通信して受信したデータをデバック出力に出力するようにする。

MainPage.xaml.csにusingを追加しておく。

using Windows.Web.Http;

クリックイベントをこんな感じにする。クリックイベントのメソッドには、asyncを付けるのをわすれないように。あと、例外処理を適当なので実際にはいい感じにしてくれ。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Uri uri = new Uri("http://www.nifty.com");

                using (var httpClient = new HttpClient())
                {
                    using (var res = await httpClient.GetAsync(uri))
                    {
                        if (res.IsSuccessStatusCode)
                        {
                            var text = await res.Content.ReadAsStringAsync();
                            Debug.WriteLine(text);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }

ついでなんで、オレオレ証明書のサーバに接続できるようにする。
次のusingを追加する。

using Windows.Web.Http.Filters;
using Windows.Security.Cryptography.Certificates;

クリックイベントはこんな感じだ。あと、オレオレ証明書のサーバーはデバック用にLAN上に用意するのが普通なんで、Package.appxmanifesでプライベートネットワーク(クライアントとサーバー)にチェックを入れておく。

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Uri uri = new Uri("https://192.168.0.1");

                var filter = new HttpBaseProtocolFilter();
                filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
                filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
                filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);
                using (var httpClient = new HttpClient(filter))
                {
                    using (var res = await httpClient.GetAsync(uri))
                    {
                        if (res.IsSuccessStatusCode)
                        {
                            var text = await res.Content.ReadAsStringAsync();
                            Debug.WriteLine(text);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }


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

↑このページのトップヘ