这不是一个真正的问题,我只想澄清一下。 我在UIButton上添加了一些子视图(每个按钮都有一个标签),我知道可能有4个或5个子视图。 所以,当我想删除一些子视图(特别是在这种情况下的第4和第5)时:
int cnt=[[(UIView *)[self.scrollView viewWithTag:index] subviews] count];
if (cnt==4) {
[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];
}
if (cnt==5) {
[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];
//[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:4] removeFromSuperview]; <-- this crash
[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];
}
当然,评论行无法执行,因为没有更多5个,但有4个子视图。
所以我必须删除在同一索引上指向两次的视图。
我想知道它是否是一种安全的方法来删除它们,我想确保最后一个视图在数组[[self.scrollView viewWithTag:index] subviews]
中向下移动一个位置。
希望很清楚。 感谢
答案 0 :(得分:8)
如果您知道要删除的视图的标记,那么更安全的方法是:
[[parentView viewWithTag:tag] removeFromSuperview];
在这里,您要求子视图自行删除,而不是要求父视图根据可能出错的某些假定顺序删除子视图。
答案 1 :(得分:4)
我宁愿使用这样的东西:
for(int i=cnt-1;i>=3;i--)
{
[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:i] removeFromSuperview];
}
通常,从列表中删除对象时,最安全的方法是从最后开始。这样,如果重组它们就无所谓了。