【问题标题】:MonoTouch.Dialog Search Bar loses search query when coming back into viewMonoTouch.Dialog 搜索栏在返回视图时丢失搜索查询
【发布时间】:2012-04-24 21:12:19
【问题描述】:

我正在使用 MT.D 在 DialogViewController 中列出人员。 EnableSearch 已打开,您可以过滤列表中的项目。但是,如果你推到另一个视图,然后回来,搜索栏是空的。我能够通过覆盖 OnSearchTextChanged (string text) 并将字符串存储到本地字段来恢复使用的搜索查询,当视图重新成为焦点时,我使用以下代码:

public override ViewDidAppear (bool animated)
{
    base.ViewDidAppear (animated);
    if (EnableSearch && !string.IsNullOrWhiteSpace (lastSearchQuery))
    {
        this.SearchButtonClicked (lastSearchQuery); // this inserts text
        this.StartSearch (); // no clue what this is doing
        this.ReloadData (); // does nothing but was worth a try
    }
}

该代码将文本插入搜索栏中并显示它,但除非您输入某些内容,否则我无法过滤它。键盘出现在视野中,并且有一个搜索按钮,但它什么也没做。有什么建议么?

【问题讨论】:

    标签: c# xamarin.ios monotouch.dialog


    【解决方案1】:

    我认为您缺少的只是调用 DialogViewController 上的 PerformFilter。

    我输入了一个快速示例来显示该行为。我从来没有看到你观察到的确切行为。我不必重新填充搜索字段。作为参考,我使用的是 Monotouch 5.2.11。

    using System;
    using System.Linq;
    using MonoTouch.UIKit;
    using MonoTouch.Dialog;
    using MonoTouch.Foundation;
    
    namespace delete201204242A
    {
        [Register ("AppDelegate")]
        public partial class AppDelegate : UIApplicationDelegate
        {
            UIWindow _window;
            UINavigationController _nav;
            MyDialogViewController _rootVC;
    
            public override bool FinishedLaunching (UIApplication app, NSDictionary options)
            {
                _window = new UIWindow (UIScreen.MainScreen.Bounds);
    
                RootElement _rootElement = new RootElement ("LINQ root element") {
                    new Section ("List") {
                        from x in new Expense [] { new Expense () {Name="one"}, new Expense () {Name="two"}, new Expense () {Name="three"} }
                        select (Element)new BindingContext (null, x, x.Name).Root
                    }
                };
    
                _rootVC = new MyDialogViewController (_rootElement);
                _rootVC.EnableSearch = true;
                _nav = new UINavigationController (_rootVC);
    
                _window.RootViewController = _nav;
    
                _window.MakeKeyAndVisible ();
    
                return true;
            }
    
            public class MyDialogViewController : DialogViewController
            {
                public MyDialogViewController (RootElement root) : base (root) {}
    
                public string SearchString { get; set; }            
                public override void ViewDidAppear (bool animated)
                {
                    base.ViewDidAppear (animated);
                    if (!string.IsNullOrEmpty (SearchString))
                        this.PerformFilter (SearchString);
                }
                public override void OnSearchTextChanged (string text)
                {
                    base.OnSearchTextChanged (text);
                    SearchString = text;
                }
            }
    
            public class Expense
            {
                [Section("Expense Entry")]
    
                [Entry("Enter expense name")]
                public string Name;
                [Section("Expense Details")]
    
                [Caption("Description")]
                [Entry]
                public string Details;
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2011-07-29
      • 2016-11-28
      • 2021-04-21
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多