Xamarin.iOSでUINavigationControllerを使用して画面遷移を構成してみます。
画面遷移では最も使用頻度の高い処理ではないでしょうか。
「SampleViewController1クラス」⇒「SampleViewController2クラス」に画面遷移する場合を示します。

画面の作成

初期画面ではボタンを押すと次の画面に遷移するようにします。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
 
namespace HelloWorld
{
    class SampleViewController1 : UIViewController
    {
        private UIButton _button;
 
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
 
            // 背景色を変更
            base.View.BackgroundColor = UIColor.LightGray;
 
            // タイトルを設定
            base.Title = "1番目の画面";
 
            // ボタンを作成
            float width = UIScreen.MainScreen.Bounds.Width * 0.5f;
            _button = new UIButton(UIButtonType.RoundedRect);
            _button.Frame = new RectangleF(width * 0.5f, 100f, width, 20f);
            _button.SetTitle("次の画面"UIControlState.Normal);
            _button.TouchUpInside += (object sender, EventArgs e) =>
                {
                    // 次の画面に遷移
                    var next_controller = new SampleViewController2();
                    base.NavigationController.PushViewController(next_controller, true);
                };
 
            // 親Viewに追加
            base.View.AddSubview(_button);
        }
    }
}


遷移後の画面では、一つ前の画面に戻るボタンがデフォルトで表示されますが、ここでは手動で戻る処理を追加してみます。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
 
namespace HelloWorld
{
    class SampleViewController2 : UIViewController
    {
        private UIButton _button;
 
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
 
            // 背景色を変更
            base.View.BackgroundColor = UIColor.LightGray;
 
            // タイトルを設定
            base.Title = "2番目の画面";
 
            // ボタンを作成
            float width = UIScreen.MainScreen.Bounds.Width * 0.5f;
            _button = new UIButton(UIButtonType.RoundedRect);
            _button.Frame = new RectangleF(width * 0.5f, 100f, width, 20f);
            _button.SetTitle("戻る"UIControlState.Normal);
            _button.TouchUpInside += (object sender, EventArgs e) =>
            {
                // 前の画面にプログラムで指定して戻る
                base.NavigationController.PopViewControllerAnimated(true);
            };
 
            // 親Viewに追加
            base.View.AddSubview(_button);
        }
    }
}


AppDelegate.csの変更

上記を使用するように変更します。
RootViewControllerにはUINavigationControllerを登録し、その中に1番目に表示したい画面を含めます。

[Register("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    UIWindow _window;
    SampleViewController1 _content_controller;
    UINavigationController _navi_controller;
 
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        _window = new UIWindow(UIScreen.MainScreen.Bounds);
 
        _content_controller = new SampleViewController1();
        _navi_controller = new UINavigationController(_content_controller);
        _window.RootViewController = _navi_controller;
 
        _window.MakeKeyAndVisible();
 
        return true;
    }
}


実行結果

「デバッグなしで開始」でiPhoneシミュレータで実行してみます。
画面遷移の様子がMac上のシミュレータで確認できます。

1番目の画面のボタンを押すと2番目の画面に遷移します。


2番目の画面では、上部のボタンでも、手動で作成したボタンのどちらを押しても前の画面に戻ります。