Xamarin.Forms ZXing.Net.Mobile在iOS 10上扫描结果后丢失当前页面

时间:2016-10-27 22:30:37

标签: ios xamarin.ios xamarin.android xamarin.forms zxing

我正在使用Xamarin.Forms,我已经实施了ZXing.Net.Mobile扫描条形码。

在Android上它工作正常,在iOS 10读取条形码后,函数“OnScanResult”被触发并执行命令Navigation.PopAsync()关闭扫描页面但是在一秒之后它还关闭了我当前的页面显示结果!

key = voqID+","+remoteModID

请帮助.. !! :)

2 个答案:

答案 0 :(得分:1)

每次调用MyTapScan.Tapped时,您都会订阅MyScannerPage.OnScanResult,因此如果点击按钮5次,您的OnScanResult将被调用5次。我希望你现在知道如何解决这个问题。

可能的解决方案之一: 拿OnScanResult委托并使其成为单独的函数,比如说ScanFinished。然后而不是

MyScannerPage.OnScanResult += (result)

MyScannerPage.OnScanResult -= ScanFinished; 
MyScannerPage.OnScanResult += ScanFinished; 

然后,您可以确定在再次订阅之前取消订阅该事件

答案 1 :(得分:0)

我已经引入了一个新变量来检查扫描是否已经被触发,现在它正常工作并且符合预期。 这是代码:

MyTapScan.Tapped += async (sender, e) =>
        {                
            await MyBtScan.ScaleTo(1.20, 100, Easing.Linear);             
            await MyBtScan.ScaleTo(1, 100, Easing.Linear);
            await Task.Delay(50);
            bool MyIsScanning = true;
            //--------------------------------------------
            MyAppLib.MyAppUtilitiesBarCodeReader MyBarCodeReader = new MyAppLib.MyAppUtilitiesBarCodeReader();                                
            var MyScannerPage = MyBarCodeReader.GetBarCodeReaderPage();
            //--------------------------------------------
            MyScannerPage.OnScanResult += (result) => {
                //Stop scanning
                MyScannerPage.IsScanning = false;
                //Pop the page and show the result
                Device.BeginInvokeOnMainThread(() => {
                    if (MyIsScanning == true)
                    {
                        MyIsScanning = false;
                        MyMachSerialNumber.Text = result.Text;
                        Navigation.PopAsync();
                    }                                                
                });
            };
            //--------------------------------------------
            //Display scanner
            await Navigation.PushAsync(MyScannerPage);
        };