メインメニューを開く

差分

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

==実装==
<source lang="csharp">
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;
}
}
</source>

個人的にはUITextFieldでreturnボタンが押された際にキーボードを非表示にする処理を手抜きするのに使った。
[[ソース]]中のForEach拡張メソッドは誰もが用意しているといわれる非標準かつ定番の拡張メソッドなので[[ググって]]実装すること。
<source lang="csharp">
public override void ViewDidLoad()
{
// return でキーボードを非表示
this.View.FindViews<UITextField>().ForEach(view =>
view.ShouldReturn += (textfield) =>
textfield.ResignFirstResponder());
}
</source>

==関連項目==
*[[.NET Framework/ForEach拡張メソッド]]
*[[Xamarin.iOS/フォーカスの当たってるUIView派生物を探す]]

==参考文献==
{{reflist}}

{{stub}}

[[category:Xamarin.iOS]]
匿名利用者