Xamarin.iOSで特定条件を満たすUIView派生物の一覧を取得する

提供: MonoBook
2015年10月8日 (木) 02:59時点における153.220.4.222 (トーク)による版 (ページの作成:「==概要== 個別に設定すると面倒なので、ビューコントローラーに貼られている特定のビューを一気に抽出して、まとめてイベン...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

個別に設定すると面倒なので、ビューコントローラーに貼られている特定のビューを一気に抽出して、まとめてイベント設定などがしたいこともある。

実装

    public static class UIViewExtensions
    {
        public static IList<T> FindViews<T>(this UIView view, Func<T, bool> predicate = null) where T:UIView
        {
            var list = new List<T>();
            var cast = view as T;

            if (cast != null)
            {
                if (predicate != null)
                {
                    if (predicate(cast))
                    {
                        list.Add(cast);
                    }
                }
                else
                {
                    list.Add(cast);
                }
            }
            foreach (var subView in view.Subviews)
            {
                var items = subView.FindViews<T>(predicate);
                list.AddRange(items);
            }
            return list;
        }
    }

個人的にはUITextFieldでreturnボタンが押された際にキーボードを非表示にする処理を手抜きするのに使った。 ソース中のForEach拡張メソッドは誰もが用意しているといわれる非標準かつ定番の拡張メソッドなのでググって実装すること。

        public override void ViewDidLoad()
        {
            // return でキーボードを非表示
            this.View.FindViews<UITextField>().ForEach(view => 
                view.ShouldReturn += (textfield) => 
                    textfield.ResignFirstResponder());
        }

関連項目

参考文献