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

提供: MonoBook
移動: 案内検索

概要[編集]

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

実装[編集]

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

関連項目[編集]

参考文献[編集]