2014-09-13 75 views
0

我正在編寫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中)是否被超類(或者甚至是自己)添加?

+0

對不起,我不知道有任何其他檢查方式,但我分擔你的焦慮。你可以實現一個不同的方法(例如'addUserSubview:')來添加子視圖,在你的代碼中使用,而超級粘貼到'addSubview:'? – pbasdf 2014-09-14 14:40:11

+0

我避免這樣做的主要原因是因爲我希望我的子類能夠像scrollview一樣使用,所以一個認爲它只是一個UIScrollView的類將正確使用它。 – Jsdodgers 2014-09-14 22:43:56

回答

0

你可以創建一個自定義的uiview作爲包裝沒有任何實現。
WrapperView wrapperview = [WrapperView new]; wrapperview.view = theRealViewToAdd;
然後你可以用[object isKindOfClass:[WrapperView class]]來測試你的自定義視圖。

+0

我不太確定你的解決方案試圖做什麼。我想能夠確定什麼類叫做-addSubview(或者更具體地說,我想知道它是否是'super')。 – Jsdodgers 2014-09-13 22:28:11

+0

對不起,然後我missunderstood你的問題。有沒有可能爲你的根問題提供一個替代解決方案,所以你不需要知道超級? – donmarkusi 2014-09-14 10:29:51

+0

嗯,我主要試圖確定哪些視圖被添加了滾動指標,所以我想如果有一種可靠的方法來區分這些視圖與其他視圖,那也可以。 – Jsdodgers 2014-09-14 22:45:09

相關問題