ios - 从 Xamarin 表单导航到 Xamarin Native

标签 ios xamarin xamarin.ios xamarin.android

我的问题是我要求我的应用程序的第一页是 native 的。当用户注销时,我需要一种从 Xamarin 表单内容页面导航到应用程序的第一个 native 页面的方法。无论如何从表单页面启动 native ViewController (iOS) 或启动 Activity (Android)。我经常使用自定义渲染器。

如果我能以某种方式重新启动应用程序或再次调用 AppDelegate 之类的,那就太好了。

任何帮助表示赞赏。

最佳答案

如果您经常使用自定义渲染器,那么您可以创建自定义 View 渲染器,如 this .例如:

在 PCL 中:

public class NewView : View
{
}

在 Android 平台中,首先在/Resources/layout 下创​​建一个布局,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <TextView android:id="@+id/tv"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:text="this is new view." />
  <Button android:id="@+id/btn"
          android:layout_height="wrap_content"
          android:layout_width="match_parent"
          android:text="change text" />
</LinearLayout>

然后为 NewView 创建渲染器像这样:
public class NewViewRenderer : ViewRenderer
{
    private TextView tv;
    private Android.Widget.Button btn;

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e)
    {
        base.OnElementChanged(e);
        if (Control == null)
        {
            var context = Xamarin.Forms.Forms.Context;
            LayoutInflater minflater = context.GetSystemService(Context.LayoutInflaterService) as LayoutInflater;
            var view = minflater.Inflate(Resource.Layout.newview, this, false);
            tv = view.FindViewById<TextView>(Resource.Id.tv);
            btn = view.FindViewById<Android.Widget.Button>(Resource.Id.btn);
            SetNativeControl(view);
        }

        if (e.OldElement != null)
        {
            btn.Click -= Btn_Click;
        }

        if (e.NewElement != null)
        {
            btn.Click += Btn_Click;
        }
    }

    private void Btn_Click(object sender, EventArgs e)
    {
        tv.Text = "Text changed!";
    }
}

最后在 ContentPage 中使用这个 View 使它像一个页面:
<ContentPage.Content>
    <local:NewView />
</ContentPage.Content>

对于iOS平台,应该有设置ViewController的方法作为 View 渲染器的 native 控件。但是我对iOS不熟悉,你可以试试。

关于ios - 从 Xamarin 表单导航到 Xamarin Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943652/

相关文章:

ios - 我应该如何正确重构我的应用程序?

ios - 同时从 TableView 行和核心数据中删除项目

c# - MonoTouch 相当于 transform.b 和 transform.a?

ios - 缺少 Windows 选项的远程 iOS 模拟器?

c# - Xamarin Forms - 使用自定义 map 渲染器在 map 上创建多个多边形

ios - Monotouch 和 catiledlayer

ios - 传入的推送通知设置警报两次 swift 4

ios - 由于 UI 编码,我的 ViewController 变得非常大

ios - 显示 Root View Controller 后黑屏,仅在继承 PayPalPaymentDelegate 时

c# - 使用绑定(bind)作为 ConverterParameter