1

iOS (MonoTouch) 用の xamarin プロジェクトで ZXing MobileScanner lib を使用しています。スキャンをセットアップしました。正常に動作し、QRコードを読み取って正しい結果が得られました。QRCode を読んだ後、別の ViewController を表示したいと思います。スキャンの結果を使用して 2 番目のコントローラーにプロパティを設定し、コントローラーを表示したいと考えています。

2 番目のビューは画面に表示されません。エラーもフィードバックもありません。単に表示されません。MobileScanner は独自のビュー (lib のソースで確認できます) を構築し、これを NavigationController に追加すると思います。これにより、コントローラーが「背後」に留まります。ボタンのクリック時にコントローラーにリダイレクトするだけのテストは正常に機能しています。また、scanner.Cancel() を呼び出してビューを「破棄」しようとしましたが、この結果

Warning: Attempt to dismiss from view controller <UINavigationController: 0x19a0c60> while a presentation or dismiss is in progress!

これが私のコードです。私のビューを表示する方法についてのヘルプは大歓迎です。

public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        // Perform any additional setup after loading the view, typically from a nib.

        scanner = new MobileBarcodeScanner(this.NavigationController);

        this.btnScan.TouchUpInside += (sender, e) => {

            //Tell our scanner to use the default overlay
            scanner.UseCustomOverlay = false;
            //We can customize the top and bottom text of the default overlay
            scanner.TopText = "Ticket vor den Scanner halten";
            scanner.BottomText = "Code wird automatisch eingelesen";

            //Start scanning
            scanner.Scan ().ContinueWith((t) => 
                                         {
                //Our scanning finished callback
                if (t.Status == System.Threading.Tasks.TaskStatus.RanToCompletion){
                    string msg = "";
                    ZXing.Result result = t.Result;

                    if (result != null && !string.IsNullOrEmpty (result.Text)) {

                        scanner.Cancel();

                        if(this.ticketScreen == null) {
                            this.ticketScreen = new TicketScreen();
                        } 

                        this.ticketScreen.ticketUrl = result.Text;
                        this.NavigationController.PushViewController(this.ticketScreen, true);

                    } else {
                        msg = "Code nicht erkannt!";
                        this.InvokeOnMainThread(() => {
                            var av = new UIAlertView("Fehler!", msg, null, "OK", null);
                            av.Show();
                        });
                    }
                }
            });


        };


    }
4

1 に答える 1

0

this.InvokeOnMainThread(()を使用すると、私のコードでは問題なく動作します。

public override void ViewDidLoad () { base.ViewDidLoad ();

    // Perform any additional setup after loading the view, typically from a nib.

    scanner = new MobileBarcodeScanner(this.NavigationController);

    this.btnScan.TouchUpInside += (sender, e) => {

        //Tell our scanner to use the default overlay
        scanner.UseCustomOverlay = false;
        //We can customize the top and bottom text of the default overlay
        scanner.TopText = "Ticket vor den Scanner halten";
        scanner.BottomText = "Code wird automatisch eingelesen";

        //Start scanning
        scanner.Scan ().ContinueWith((t) => 
                                     {
            //Our scanning finished callback
            if (t.Status == System.Threading.Tasks.TaskStatus.RanToCompletion){
                string msg = "";
                ZXing.Result result = t.Result;

                if (result != null && !string.IsNullOrEmpty (result.Text)) {

                    scanner.Cancel();

        this.InvokeOnMainThread(() => 
            {
              if(this.ticketScreen == null) {
                    this.ticketScreen = new TicketScreen();
                } 

                this.ticketScreen.ticketUrl = result.Text;
                this.NavigationController.PushViewController(this.ticketScreen, true);

        });



                } else {
                    msg = "Code nicht erkannt!";
                    this.InvokeOnMainThread(() => {
                        var av = new UIAlertView("Fehler!", msg, null, "OK", null);
                        av.Show();
                    });
                }
            }
        });


    };


} 
于 2013-07-25T12:21:16.053 に答える