2016-04-25 18 views
3

Ich brauche deine Hilfe!Wie kann ich die Ansicht in der Navigationsleiste von Xamarin Forms einbeziehen?

Ich arbeite an einem mobilen Entwicklungsprojekt, plattformübergreifend. Ich verwende Visual Studio mit Xamarin Forms. Ich habe eine SearchBar (Xamarin.Forms-Klasse), aber mein Problem ist es, dies in die NavigationBar aufzunehmen.

Momentan habe ich eine MasterDetailPage und ich init this.Detail mit neuer NavigationPage (new customPage()). Ich habe auch einen SearchBar-Renderer. Also, ich brauche Original NavigationBar (Ich möchte die Rückkehr-Taste), aber ich möchte meine SearchBar innerhalb hinzufügen.

Ich wäre sehr dankbar, wenn Sie einen Weg kennen, um dies vor allem für Android zu tun. Vielen Dank im Voraus!

Antwort

4

Sie benötigen eine benutzerdefinierte NavigationRenderer erstellen und geben Sie Ihre eigene UISearchBar in die UIToolbar oder SearchView in die ViewGroup:

Xamarin Forms: Renderer Base Classes and Native Controls

Als Beispiel für ein iOS UISearchBar in der Navigationsleiste über das Einfügen eine benutzerdefinierte NavigationRenderer:

enter image description here

Hinweis: Um die Dinge voneinander zu entkoppeln, können Sie mithilfe der MessagingCenter Nachrichten pumpen, ohne dass hardcoding Ereignisabhängigkeiten innerhalb des benutzerdefinierten Renderers erforderlich sind.

[assembly:ExportRenderer (typeof(NavigationPage), typeof(SeachBarNavigationRender))] 
namespace Forms.Life.Cycle.iOS 
{ 
    public class SeachBarNavigationRender : NavigationRenderer 
    { 
     public SeachBarNavigationRender() : base() 
     { 
     } 

     public override void PushViewController (UIViewController viewController, bool animated) 
     { 
      base.PushViewController (viewController, animated); 
      List<UIBarButtonItem> toolbarItem = new List<UIBarButtonItem>(); 
      foreach (UIBarButtonItem barButtonItem in TopViewController.NavigationItem.RightBarButtonItems) { 
       if (barButtonItem.Title.Contains("search")) { 
        UISearchBar search = new UISearchBar (new CGRect (0, 0, 200, 25)); 
        search.BackgroundColor = UIColor.LightGray; 
        search.SearchBarStyle = UISearchBarStyle.Prominent; 
        search.TextChanged += (object sender, UISearchBarTextChangedEventArgs e) => { 
         D.WriteLine(e.SearchText); 
         MessagingCenter.Send<object, string> (this, "SearchText", e.SearchText); 
        }; 
        barButtonItem.CustomView = search; 
       } 
       toolbarItem.Add (barButtonItem); 
      } 
      TopViewController.NavigationItem.RightBarButtonItems = toolbarItem.ToArray(); 
     } 
    } 
} 
+1

Haben Sie etwas Code, um dies in einem benutzerdefinierten Android-Renderer arbeiten zu lassen? :) – jdstaerk

+1

@DDerType Ich brauche die gleiche Idee für Android .Do hast du ... – SANDEEP