我正在编写UIScrollView的子类,作为我正在做的一部分,我需要第二个scrollView来包含所有子视图。
原因是第二个scrollview将具有“实际”内容大小,而子类scrollview将具有更大的内容大小,并且在-scrollViewDidScroll中:我根据实际内容更改第二个scrollView的内容偏移量偏移量。
当用户向scrollView添加子视图时,它实际上会将其添加到第二个scrollView。
我最初遇到的一个问题是UIScrollView类为scrollView添加了两个视图(滚动指示符),我想留下这些视图。
我找到的解决方法which is the top answer here(有修改),适用于我想要的是在-addSubview方法中获取发件人类的名称,如下所示:
NSString *sourceString = [[NSThread callStackSymbols] objectAtIndex:1];
// Example: 1 UIKit 0x00540c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
NSCharacterSet *separatorSet = [NSCharacterSet characterSetWithCharactersInString:@" -[]+?.,"];
NSMutableArray *array = [NSMutableArray arrayWithArray:[sourceString componentsSeparatedByCharactersInSet:separatorSet]];
[array removeObject:@""];
if (![[array objectAtIndex:3] isEqualToString:@"<redacted>"]) {
//My code here
}
else {
[super addSubview:view];
}
虽然这个代码块有效但我得到了我想要的结果,但它看起来有点hacky,并且需要检查调用类是否为“”,我认为这意味着它不希望我看到它名称。我担心使用这种方法会导致问题,如果将来发生任何变化,或者其他一些类的值为“”
基本上我的问题是(也是TL; DR):有没有更好的方法(或更可靠)检查是否正在添加的视图(在-addSubview中)是由超类(甚至是自己)添加的? / p>
答案 0 :(得分:0)
您可以创建自定义uiview作为包装器而无需任何实现。
WrapperView wrapperview = [WrapperView new];
wrapperview.view = theRealViewToAdd;
然后你可以使用[object isKindOfClass:[WrapperView class]]来测试你的自定义视图。