【问题标题】:How to include view in NavigationBar of Xamarin Forms?如何在 Xamarin Forms 的 NavigationBar 中包含视图?
【发布时间】:2016-04-25 16:27:05
【问题描述】:

我需要你的帮助!

我从事一个跨平台的移动开发项目。我将 Visual Studio 与 Xamarin 表单一起使用。我有一个 SearchBar(Xamarin.Forms 类),但是,我的问题是将它包含在 NavigationBar 中。

目前,我有一个 MasterDetailPage,并使用 new NavigationPage(new customPage()) 初始化 this.Detail。我也有一个 SearchBar 渲染器。 所以,我需要原始的 NavigationBar(我想保留返回按钮),但我想在里面添加我的 SearchBar。

如果您知道一种特别是对 android 执行此操作的方法,我将不胜感激。 提前谢谢你!

【问题讨论】:

    标签: android xamarin include navigationbar searchbar


    【解决方案1】:

    您需要创建一个自定义NavigationRenderer 并将您自己的UISearchBar 插入UIToolbarSearchView 插入ViewGroup

    Xamarin 表单:Renderer Base Classes and Native Controls

    作为通过自定义NavigationRenderer 将 iOS UISearchBar 插入导航栏的示例:

    注意:为了保持事物解耦,使用 MessagingCenter 允许您在自定义渲染器中无需任何硬编码事件依赖项即可发送消息。

    [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 ();
            }
        }
    }
    

    【讨论】:

    • 有一些代码可以让它在 Android 自定义渲染器中工作吗? :)
    猜你喜欢
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多