画面A,B があって B だけ横向き固定にしたい。

これを Xamarin.iOS でやりたい。

Storyboard を Interface Builder で開いて、NavigationController のカスタムクラスを MyNavigationController とした。

すると、Xamarin Studio 側にも MyNavigationController.cs ができるので、Stackoverflow の通り、以下のように実装した。

```csharp MyNavigationController.cs
// This file has been autogenerated from a class added in the UI designer.

using System;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Linq;

namespace MyApp
{
public partial class MyNavigationController : UINavigationController
{
public MyNavigationController (IntPtr handle) : base (handle) { }

    public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation()
    {
        return this.ViewControllers.Last().PreferredInterfaceOrientationForPresentation();
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return this.ViewControllers.Last().GetSupportedInterfaceOrientations();
    }

    public override bool ShouldAutorotate()
    {
        return this.ViewControllers.Last().ShouldAutorotate();
    }

} } ```

次に、横固定にしたい画面Bを以下のように実装。

```csharp BViewController.cs
// This file has been autogenerated from a class added in the UI designer.

using System;

using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace MyApp
{
public partial class BViewController : UIViewController
{
public PhotoPreviewViewController (IntPtr handle) : base (handle)
{
}

    public override UIInterfaceOrientation PreferredInterfaceOrientationForPresentation()
    {
        return UIInterfaceOrientation.LandscapeLeft;
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return UIInterfaceOrientationMask.LandscapeLeft;
    }

    public override bool ShouldAutorotate()
    {
        return false;
    }
} } ```

これで動かしてみたものの、一向に画面が固定されない。
しばらく悩んだ後、MyNavigationController のコンストラクタにブレークポイントを仕掛けてデバッグしてみたとても止まらない。
よくよくアプリケーション出力のコンソールを見てみると、

Unknown class MyNavigationController in InterfaceBuilder file.”

と出力されていることに気づいた。
なんか、.storyboard と C# クラスの関連付けがうまくいってないらしい。

ソリューションをクリアして、再ビルドしたらこのエラーは消え、画面Bの向きが固定されるようになった!

(ただ、縦画面のまま画面Bに遷移すると縦画面で固定されてしまう。これは実装が何か足りない気がする。)

Xamarin
iOS
C#

published

Ads

Read more!

amay077

Microsoft MVP(Xamarin). フルリモートワーカー. Geospatial Mobile app developer. Love C#.

amay077 amay077