[VS-Mac]VisualStudio for Mac でSegue
VisualStudio for MacのSegueサンプルプログラム(Mac Cocoa)
GitHubに置いてあります TestSegue
Macのウィンドウ(View)切り替えはSegueを利用するようです。
はじめは何のことやらわからなかったのですが、Xamarinのサンプルプログラム等を解析してみて徐々にイメージがつかめてきたので忘れた場合のためにメモしておきます。
アプリの概要
- デバッグすると、MainViewが開きます。
- テキストフィールドに文字を入力してボタンをクリック。
- SubViewが開いて、テキストフィールドにMainViewの入力文字列がコピーされます。
- SubViewのテキストフィールドを変更してCloseボタンをクリック
- SubViewが閉じて、MainViewに入力データが渡されます。
実行画面
Modalの実行画面
Sheetの実行画面
Popoverの実行画面
Show
StoryBoardの編集
GitHubページを参照
コード
SubView.cs
- 文字列の受け渡しのために「Arg1」文字列プロパティを追加
- ViewWillAppear()をoverrideしてウィンドウ表示されるときにTextFieldにArg1を表示
- 「SubButton_Click」アクションをSubView.designer.csからコピーしてコード実装
- ViewControllerへの参照は「PresentingViewController」で可能(ParentViewControllerはnullでNG)
- Segueのkindが「Show」の場合はnullが帰ってきて参照できないため、SubViewクラスにMainViewを保持するプロパティを作成すると可能
- ViewControllerに文字列プロパティまたはpublic関数を作成するとこれが利用出来る
public partial class SubView : NSViewController
{
public string Arg1 { get; set; } //呼び出し元から受け取るデータ
/* //for Show
private ViewController vc;
public ViewController ParentView { get { return vc; } set { vc = value; } }
*/
public SubView(IntPtr handle) : base(handle)
{
}
public override void ViewWillAppear() //またはViewDidLoad()
{
base.ViewWillAppear();
if (Arg1 != "")
SubText.StringValue = Arg1;
else
SubText.StringValue = "no value from MainView";
}
partial void SubButton_Click(Foundation.NSObject sender)
{
//Showの場合下をコメントアウト
ViewController vc = this.PresentingViewController as ViewController; //呼び出し元のViewControllerインスタンス
//vc.SubviewValue = SubText.StringValue; //プロパティに渡す場合
vc.UpdateLabel(SubText.StringValue); //呼び出し元のpublic関数にアクセス可能
this.View.Window.Close(); //これで閉じることができる
}
}
ViewController.cs
- Button_Clickイベント:PerformSegueでSegue1を呼び出す
- PrepareForSegueが呼び出され、segue.IdentifierでSegueを識別できる
- segue.DestinationControllerで新たに呼び出すViewControllerのインスタンスを参照できる
partial void Button_Click(Foundation.NSObject sender)
{
//ボタンをドラッグしてSegueを作成した場合は不要
//PerformSegueは個々のコントロールではなくViewControllerそのものを渡すようだ
PerformSegue("Segue1", this); //PrepareForSegueがここで呼ばれる
}
public override void PrepareForSegue(NSStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue(segue, sender);
this.View.Window.Title = segue.Identifier; //タイトル変えてみた
SubView sub = segue.DestinationController as SubView; //参照できる
sub.Arg1 = TextField1.StringValue; //プロパティにアクセス可能
//sub.ParentView = this; //for Show
}
//public string SubviewValue { get; set; } //プロパティで受け取る場合
public void UpdateLabel(string str)
{
TextField1.StringValue = str;
}
public override void ViewWillDisappear()
{
base.ViewWillDisappear();
NSApplication.SharedApplication.Terminate(Self);
}
開発環境
- Visual Studio Community for Mac 2017 Ver.7.0.1
- OSX ElCapitan
- MacBook Pro Retina model
Reference:
-
Segue
- Xamarin Guides Mac - Working with Storyboards - Segue
- OS X アプリでStoryboardとSegueを利用する(概略)
-
Segue and parameter
-
ViewControllerの参照
-
ViewControllerを閉じる方法
Author And Source
この問題について([VS-Mac]VisualStudio for Mac でSegue), 我々は、より多くの情報をここで見つけました https://qiita.com/grayhead0603/items/b21901bf0e86b5966385著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .