我正在編寫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];
}
儘管此代碼塊的作品,我得到我想要的結果,它似乎有點哈克,並要求檢查,如果調用類是「」,我會假設它不希望我看到它的名字。我擔心如果將來有什麼改變,或者如果某些其他類別的值爲「
基本上我的問題是(也TL; DR):有沒有更好的方法(或更多可靠的)來檢查被添加的視圖(在-addSubview中)是否被超類(或者甚至是自己)添加?
對不起,我不知道有任何其他檢查方式,但我分擔你的焦慮。你可以實現一個不同的方法(例如'addUserSubview:')來添加子視圖,在你的代碼中使用,而超級粘貼到'addSubview:'? – pbasdf 2014-09-14 14:40:11
我避免這樣做的主要原因是因爲我希望我的子類能夠像scrollview一樣使用,所以一個認爲它只是一個UIScrollView的類將正確使用它。 – Jsdodgers 2014-09-14 22:43:56