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

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]