2010-08-04 9 views
0

我想用不同的UI元素填充scrollView。 因此,我想我會寫一個方法,記住scrollView中的當前位置,並將該元素添加到當前位置的scrollView。iPhone scrollView使用id動態添加元素

喜歡的東西:

- (void)addUIElement:(id)element withWidth:(CGFloat)width andHeight:(CGFloat)height andYGap:(CGFloat)YGap { 

    element.frame = CGRectMake(currentScrollPos.x, (currentScrollPos.y + YGap), width, height); 
    [scrolly addSubview:element]; 

    //And then set the current scroll position here 
} 

不幸的是,當我嘗試做訪問element.frame = ......,我得到了會員的要求的東西不是一個結構或聯合。當我嘗試做[element frame] = ...左值作爲賦值的左操作數時需要。

現在,首先我不確定動態添加對象到scrollview的最佳方式是什麼。也許任何人都有更好或更簡單的方法。

然後另一方面,我不明白爲什麼上述不起作用?!我是否必須將自己的元素投射到實際的課堂上?我以爲我不會這麼做......同樣,我的方法也不會有多大意義。或者至少將需要更多的步驟...

回答

0

這應該工作,我認爲:

[element setFrame:...]; 

但是,如果你在你的方法不同的UI元素的工作可能是你可以讓你的元素參數的UIView *代替的id?這樣你的代碼將適用於所有UIView子類(這是你真正需要的,我猜想)

+0

是啊,我想過了。但仍然。不知何故,它應該與ID ...我會嘗試setFrame。謝謝 – jagse 2010-08-04 15:01:32

+0

這實際上工作。但我真的沒有得到什麼區別?編譯器問題,或者它爲什麼工作? – jagse 2010-08-04 15:03:02

+0

是的,這是編譯器問題,只有id類型的編譯器無法確定哪個幀。 – Vladimir 2010-08-04 15:10:09

0

區別在於「id」沒有任何對幀的引用。它可能是任何東西。你想在方法聲明中做(UIView *)element,或者在調用element.frame時,你會做((UIView *)element).frame

(而且是啊,你把屏幕上的所有東西都是從UIView繼承 - UIButtonUIImageView等)

+0

是的,我知道。我只是想知道爲什麼ID不起作用。即使它沒有引用,我認爲它應該在編譯時檢查... – jagse 2010-08-05 15:13:03

+0

「編譯時間」不知道你會最終扔在一個方法的id聲明參數什麼樣的東西 - 你,或你的同事等 – Kalle 2010-08-05 17:04:08