Отмена навигации в TabbarRenderer Xamarin.iOS - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть пользовательское средство визуализации вкладок для iOS в приложении Xamarin.Forms.В некоторых случаях мне нужно остановить событие ItemSelected.По сути, если пользователь нажимает элемент на панели вкладок, мне нужно выполнить пользовательское действие и НЕ перемещаться.

Похоже, что ItemSelectedevent слишком поздно для этого.Я знаю, что на UITabbarController есть метод ShouldShowViewController, но он был абстрагирован TabbarRenderer.

Как мне этого добиться?

1 Ответ

0 голосов
/ 26 ноября 2018

Решение:

Существует метод SelectViewController. Возвращает значение bool. Если возвращается True, он будет перемещаться по новой странице при выборе элемента ине будет, если вернет false. Вы можете сослаться на следующий код. (Например, вы не хотите перемещаться при нажатии второй дочерней страницы на странице с вкладками)

в Custom Renderer

private xxx page;//xxx is your tabbedPage in forms

protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
  base.OnElementChanged(e);

  if(e.NewElement!=null)
  {
    page = (xxx)e.NewElement;
  }

  else
  {
    page = (xxx)e.OldElement;
  }

  if (this.Element != null)
  {
     UITabBarController tabbar = (UITabBarController)this.ViewController;

     tabbar.ShouldSelectViewController += SelectViewController;

  }

}


public  bool SelectViewController(UITabBarController tabBarController, UIViewController viewController)
{
  if(viewController==this.ViewControllers[1])
  {
    //do something you want 

    return false;
  }

  else
  {
    return true;
  }

} 
...