2

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
    }
}

そのコードはテキストを検索バーに挿入して表示しますが、何かを入力しない限りフィルタリングすることはできません。キーボードが表示され、検索ボタンがありますが、何もしません。助言がありますか?

4

1 に答える 1

5

あなたが見逃しているのは、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;
        }

    }
}
于 2012-04-25T05:11:31.593 に答える