Kyl*_*yle 3 cocoa-touch objective-c nsarray ios subviews
使用一组UIViews和UIImageViews([[[UIApplication sharedApplication] window]子视图]).我只需要删除UIImageView类型的最高索引的对象.
您可以使用indexOfObjectWithOptions:passingTest:
方法反向搜索使用块传递测试的对象的数组,然后在结果位置删除该对象:
NSUInteger pos = [myArray indexOfObjectWithOptions:NSEnumerationReverse
passingTest:^(id obj, NSUInteger idx, BOOL *stop) {
return [obj isKindOfClass:[UIImageView class]]; // <<== EDIT (Thanks, Nick Lockwood!)
}];
if (pos != NSNotFound) {
[myArray removeObjectAtIndex:pos];
}
Run Code Online (Sandbox Code Playgroud)
另一种基于块的解决方案
[window.subviews enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id view, NSUInteger idx, BOOL *stop)
{
if ([view isKindOfClass:[UIImageView class]]){
[view removeFromSuperview];
*stop=YES;
}
}];
Run Code Online (Sandbox Code Playgroud)
非块解决方案:
for (UIView *view in [window.subview reverseObjectEnumerator])
{
if ([view isKindOfClass:[UIImageView class]]){
[view removeFromSuperview];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我在github上发布了一个演示代码,它显示了两个解决方案.