Objective c 除了enumerate和check之外,还有其他方法按类筛选子视图吗?
首先,过滤意味着在子视图中查找所有(targetClass)视图 通常,如果我们想按类过滤子视图,我们可能会:Objective c 除了enumerate和check之外,还有其他方法按类筛选子视图吗?,objective-c,uiview,subview,Objective C,Uiview,Subview,首先,过滤意味着在子视图中查找所有(targetClass)视图 通常,如果我们想按类过滤子视图,我们可能会: // Create an array to hold them NSMutableArray *filteredViews = [NSMutableArray new]; // enumerate and check for (UIView *view in parentView.subviews) { if ([view isMemberOfClass:[targetCla
// Create an array to hold them
NSMutableArray *filteredViews = [NSMutableArray new];
// enumerate and check
for (UIView *view in parentView.subviews) {
if ([view isMemberOfClass:[targetClass class]) {
[filteredViews addObject:view];
}
}
这是正确的方法吗
Cocoa Touch是否有专门的方法来筛选子视图?您可以使用NSPredicate定义规则来选择所需的项目。注意,我使用的是
isKindOfClass
,而不是isMemberOfClass
,因为前者考虑了类的层次结构,并且能够识别您要查找的类的子类
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [targetClass class]];
NSArray* filteredViews= [parentView.subviews filteredArrayUsingPredicate:predicate];
您可以使用NSPredicate定义规则来选择所需的项目。注意,我使用的是
isKindOfClass
,而不是isMemberOfClass
,因为前者考虑了类的层次结构,并且能够识别您要查找的类的子类
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [targetClass class]];
NSArray* filteredViews= [parentView.subviews filteredArrayUsingPredicate:predicate];
不确定筛选子视图是什么意思。你能解释一下你想做什么吗?你为什么要这么做?在开发者文档中,苹果建议要么存储指向需要修改的视图的指针(例如使用属性),要么通过标签识别视图。在大多数情况下,这将是一个更清洁的解决方案。→ 不确定筛选子视图是什么意思。你能解释一下你想做什么吗?你为什么要这么做?在开发者文档中,苹果建议要么存储指向需要修改的视图的指针(例如使用属性),要么通过标签识别视图。在大多数情况下,这将是一个更清洁的解决方案。→ 太棒了,正是我想要的!太棒了,正是我想要的!