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();
});
}
}
});
};
}