私は多分このような何かがうまくいくかもしれないと思っていました:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
あらゆる種類のサブビューを削除したい。UIImages、ボタン、テキストフィールドなど。
私は多分このような何かがうまくいくかもしれないと思っていました:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
あらゆる種類のサブビューを削除したい。UIImages、ボタン、テキストフィールドなど。
b
はすぐにsubviews
配列から削除され、高速列挙ループ内で突然変異を引き起こすと思いましたが、これは禁止されています。
copy
それはコピーを作成することを指定手段に設定する場合。取得については何も指定されていません。コピーが返される可能性は非常に高いですが、それはプロパティ定義の一部ではありません。
回答:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
バリアントと同じですが、少し短くなっています。
このように使用できます
//adding an object to the view
view.addSubView(UIButton())
// you can remove any UIControls you have added with this code
view.subviews.forEach { (item) in
item.removeFromSuperview()
}
ビューは、すべてを削除するビューです。forEachを実行してすべてのサブビューを削除しているだけです
Swift4 +の場合。に拡張子を付けることができUIView
ます。必要に応じて呼び出してください。
extension UIView {
func removeAllSubviews() {
subviews.forEach { $0.removeFromSuperview() }
}
}