我目前正在登录我的应用程序,现在我在iOS部分。
我创建了一个如下所示的自定义渲染器:
[assembly: ExportRenderer(typeof(TwitterLogin), typeof(TwitterLogin_iOS))]
在iOS渲染器中完成我的身份验证后:
auth.Completed += (object sender, AuthenticatorCompletedEventArgs ee) =>
{
TwitterLogin.SuccessfulLoginAction.Invoke();
}
我已经在我的TwitterLogin页面上创建了一个在我的共享代码中看起来像这样的函数,该代码在登录完成时运行:
public static Action SuccessfulLoginAction
{
get
{
return new Action(async () =>
{
System.Diagnostics.Debug.WriteLine("login is complete!");
});
}
}
用户登录后我想要发生的是popmodalasync的页面,(之前是pushmodalasync'd到其当前页面,TwitterLogin页面)我想要做的是添加内部的方法SuccessfulLoginAction动作:
await Navigation.PopModalAsync ();
但由于SuccessfulLoginAction是一种静态方法,我无法到达Navigation
。
如果我这样做:
auth.Completed += (object sender, AuthenticatorCompletedEventArgs ee) =>
{
TwitterLogin.SuccessfulLoginAction.Invoke();
TwitterLogin log = new TwitterLogin();
log.popPage();
}
并在twitterlogin页面上显示如下函数:
public async void popPage ()
{
await Navigation.PopModalAsync();
}
我得到了崩溃Index was out of range. Must be a non-negative and less than size of the collection
让我感到奇怪,因为我从另一个页面开始使用此代码:await Navigation.PushModalAsync(new TwitterLogin());
我也试过了MessagingCenter
,但由于我不能在静态方法中使用this
,我不能100%确定如何使其工作,当我使用“null”时我明显崩溃:
return new Action(async () =>
{
MessagingCenter.Send<TwitterLogin>(null, "popPage");
}
public TwitterLogin()
{
MessagingCenter.Subscribe<TwitterLogin>(null, "popPage", async (sender) => {
await Navigation.PopModalAsync();
});
}
有关如何调整代码/替代方法的任何想法,以便我可以popmodmodal当前页面?
答案 0 :(得分:0)
使用此代码完成解决问题:
TwitterLogin log = new TwitterLogin();
auth.Completed += (object sender, AuthenticatorCompletedEventArgs ee) =>
{
log.OnButtonClicked();
}
在页面上:
public event EventHandler ButtonClicked;
public async void OnButtonClicked()
{
await Application.Current.MainPage.Navigation.PopAsync();
}