如何判断是否从超类中添加了子视图?

时间:2014-09-13 19:16:27

标签: ios objective-c subclassing addsubview

我正在编写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>

1 个答案:

答案 0 :(得分:0)

您可以创建自定义uiview作为包装器而无需任何实现。
WrapperView wrapperview = [WrapperView new]; wrapperview.view = theRealViewToAdd;
然后你可以使用[object isKindOfClass:[WrapperView class]]来测试你的自定义视图。