Xamarin:Storyboard: 지정된 뷰로 강제로 전환

  • 맞춤 URL 구성표에서 사이트에서 활성화 코드를 받고 기기 앱을 활성화하는 유스 케이스

  • Activation을 수행하는 View 추가


  • 뷰 (ActivationController) 추가
  • 스토리 보드 ID 지정

  • image
  • Activation Code를 표시하는 라벨 (ActivateLabel)

  • image
  • Activate 시키는 버튼(ActivateButton)

  • image

    맞춤 체계 정의


  • Info.plist
  • Advanced 탭
  • "qrcode"라는 “URL Schemes”를 정의

  • Activation 뷰의 라벨에 코드 세트 #


  • 실제로는 ActivateButton의 터치 이벤트의 핸들러도 정의하지만 생략
  • 
        using System;
        using MonoTouch.Foundation;
        using MonoTouch.UIKit;
        using System.CodeDom.Compiler;
    
        namespace QrCoder
        {
            partial class ActivationController : UIViewController
            {
                string _activation_code = null;
    
                public string ActivationCode
                {
                    set{ this._activation_code = value; }
                }
    
                public override void ViewDidAppear (bool animated)
                {
                    base.ViewDidAppear (animated);
                    this.ActivateCode.Text = _activation_code ?? "" ;
                }
            }
        }
    

    AppDelegate에서 사용자 지정 구성표로 시작하도록 설정


  • OpenUrl 재정의
  • 
            ActivationController _activation_controller = null; 
    
            public override bool OpenUrl (
                UIApplication application, 
                NSUrl url, string sourceApplication, NSObject annotation)
            {
                // url :  qrcode://host/path?query#fragment 
    
                // ビューコントローラをStoryboardからロードしてクラス作成する
                if (_activation_controller == null) {
                    _activation_controller = this.Window.RootViewController.Storyboard.InstantiateViewController (
                        "ActivationController"
                    ) as ActivationController;
                }
    
                // URL Query
                var query = System.Web.HttpUtility.ParseQueryString (url.Query); // System.Web.WebServices
    
                if (string.IsNullOrEmpty (query ["code"]))
                    // codeパラメータがなければActivateしない
                    return false;
    
                // ビューにコードをセット
                _activation_controller.ActivationCode = query ["code"].ToString ();
    
                // ナビゲーションコントローラを取得し、ActivationControllerビューをそこにプッシュする
                var controller = (UINavigationController)this.Window.RootViewController;
                controller.PushViewController (_activation_controller, true);
    
                // OpenUrlが処理されてUIが変わります
                return true;
            }
    

    Safari에서 테스트


  • qrcode://me/activate?code=activation_code에서 Activation 뷰가 시작되어 코드가 설정되었습니다.
  • "Activate Now"를 클릭하여 기기의 앱을 활성화합니다.
  • 좋은 웹페이지 즐겨찾기