UIViews 및 UIImageViews 배열 사용 ([[[UIApplication sharedApplication] 창] 하위 뷰]). UIImageView 형식의 가장 높은 인덱스의 개체 만 제거해야합니다.NSArray가 마지막 유형의 객체를 제거합니까?
답변
다른 블록 기반 솔루션
[window.subviews enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id view, NSUInteger idx, BOOL *stop)
{
if ([view isKindOfClass:[UIImageView class]]){
[view removeFromSuperview];
*stop=YES;
}
}];
비 블록 졸 의 ution :
for (UIView *view in [window.subview reverseObjectEnumerator])
{
if ([view isKindOfClass:[UIImageView class]]){
[view removeFromSuperview];
break;
}
}
편집
나는 데모 코드를 발표, 즉 github에, 두 솔루션을 보여줍니다.
블록이 더 예뻐요. – Kyle
루프 내에서 직접 뷰를 제거하면 viewToRemove 변수를 더 이상 필요 없게 될 수 있습니다. –
정말 확실합니까? 빠른 열거 형에서는 열거하는 동안 배열을 변경하는 것이 금지됩니다. – vikingosegundo
방법에 대해 :
UIWindow *window = [[UIApplication sharedApplication] window];
UIView *imageView = nil;
for (UIView *view in window.subviews)
{
if ([view isKindOfClass:[UIImageView class]])
{
imageView = view;
}
}
//this will be the last imageView we found
[imageView removeFromSuperview];
음 Kyle은 어쨌든 해결책을 더 좋아 했으므로, 당신이 이길 거라 생각합니다 .-) –
:) 내 코드는 대개 매일 거울 앞에서 30 분을 보내고 꽤됩니다. – vikingosegundo
위의 내 의견을 참조하십시오 - 더 향상시킬 수 있습니다. –
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];
}
이것은 좋은 해결책이지만, == 대신 isKindOfClass를 사용하여 형식을 비교해야합니다. 그렇지 않으면 UIImageView가 실제로 UIImageView의 하위 클래스이면 작동하지 않습니다. –
@NickLockwood 그건 좋은 캐치, 문제를 발견해 주셔서 대단히 감사합니다! – dasblinkenlight
또한 pos! = NSNotFound 검사를 추가해야합니다. 배열에 UIImageView가 없으면 충돌이 발생합니다. –
- 1. xcode는 NSArray가 존재하고 객체를 포함하는지 확인합니다.
- 2. regex를 사용하여 마지막 특정 문자열을 어떻게 제거합니까? "CNAME,"마지막 개까지
- 3. 문자열에서 마지막 n 문자는 어떻게 제거합니까?
- 4. 1 유형의 객체를 다른 유형의 객체로 전송
- 5. 동일한 유형의 객체를 가리키는 것
- 6. 변수 유형의 객체를 선언하는 방법
- 7. 좋은 유형의 객체를 반환하는 방법
- 8. SQLite의 NSArray가 CGRects를 그립니다.
- 9. 버튼 클릭시 NSArray가 증가합니다
- 10. NSArray가 bool 객체로 채워짐
- 11. NSArray가 앱 충돌을 일으킴
- 12. NSArray가 범위를 벗어났습니다.
- 13. NSArray가 EXC_BAD_ACCESS를 야기 함
- 14. NSArray의 NSArray가 잘못되었습니다.
- 15. JqGrid 로컬 데이터 유형의 마지막 페이지 설정
- 16. 특정 유형의 마지막 버튼을 추적하는 방법
- 17. Java에서 기본 유형의 Class 객체를 얻을 수 있습니까? 원시 유형의
- 18. JSON 유형의 문자열에서 사전 유형의 객체를 만들려면 어떻게해야합니까?
- 19. 예약 된 문자 목록에서 마지막 문자를 어떻게 제거합니까?
- 20. NSArray가 배열의 모든 객체를로드하지 않습니까?
- 21. NSArray가 MVC 뷰에서 초기화되지 않습니다.
- 22. 코어 데이터/NSArray가 누출을 초래합니까?
- 23. 객체를 해당 유형의 항목으로 박스에서 꺼내십시오.
- 24. javascript에서 주어진 유형의 모든 객체를 얻는 방법
- 25. 어떤 유형의 객체를 문자열로 변환하는 방법
- 26. 자체와 같은 유형의 객체를 만들 수 있습니까?
- 27. Object 유형의 객체를 직렬화하는 방법은 무엇입니까?
- 28. 홀수 유형의 객체를 파일에 쓰려면? in java
- 29. 언제 C#에서이 유형의 객체를 만들까요?
- 30. WCF 서비스가 "객체"유형의 객체를 반환하게하는 원인
참고 : NSArray 대신 NSMutableArray를 사용해야합니다. – Moshe