如何从按钮获得导航控制

本文关键字:导航 控制 按钮 | 更新日期: 2023-09-27 17:49:14

我知道如果我使用视图控制器,我可以使用这个:

var scanner = new MobileBarcodeScanner(this.NavigationController);

我怎么知道我使用什么导航里面的按钮我需要使用?

public class BarReaderButtonRenderer : ButtonRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);
        // I tried this but don't worked
        var scanner = new MobileBarcodeScanner(this.NavigationController);
        // I tried this but do
        var scanner = new MobileBarcodeScanner(this);
        Element.Clicked += async(s_, e_) => {
            // Setup our button
            // 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 = "Hold camera up to barcode to scan";
            scanner.BottomText = "Barcode will automatically scan";
            //Start scanning
            var result = await scanner.Scan ();
            HandleScanResult(result);
        };
    }
}

我不能在按钮渲染中使用此代码。或者以前有人这么做过?

该项目是iOS和Android的共享应用程序。

如何从按钮获得导航控制

创建扫描仪的代码应该留在视图控制器/activity/page中。您仍然可以使用自定义按钮,并将所需的代码添加到Clicked事件处理程序中。

var myCustomButton = new BarReaderButton();
myCustomButton.Clicked += async(s, e) => {
        var scanner = new MobileBarcodeScanner();
        scanner.UseCustomOverlay = false;
        //Start scanning
        var result = await scanner.Scan ();
       //Do something with the result
    };

如果这是Xamarin。你还必须在页面代码中使用特定平台的代码,因为条形码阅读器需要Android上的上下文:

#if __IOS__
var scanner = new MobileBarcodeScanner();
#elif __ANDROID__
var scanner = new MobileBarcodeScanner(Forms.Context);
#endif