2012-10-05 73 views
0

我的問題涉及CS193p中的分配3。iOS - 從視圖控制器獲取信息以在視圖中繪製圖形

我有一個可怕的時間在我的視圖中獲取drawRect接收從我的視圖控制器傳遞的信息。基本上,我的目標是將特定於視圖的信息(如self.view.size.width)傳遞給控制器​​,並對其進行一些修改(如result = self.view.size.width * 2),並將result傳回drawRect,以便它可以將新信息繪製出來。 Im相當肯定我有我的代表團設置正確,真的試過潛在變通的列表:

  • 做出公開查看@property,我在我的controller.m通過

    查看* NewView的訪問 someResult = newView.variable

,我會隨後通過

試圖訪問從我種
  • 使用方法設置我的視圖的@protocal,我嘗試通過myView.dataSource someMethod:someData

但迄今爲止都未目前正(即傳遞數據我的self.variable總是會出現爲0,這表明沒有數據傳遞給它)。非常感謝您的幫助!

UPDATE:

的罪魁禍首是,在故事板,我沒有控制拖動視圖控制器視圖,因此控制器從未接通......但至少現在它作品。^_^

+1

這是你想做什麼的正確描述? – MaxGabriel

回答

0

View *newView someResult = newView.variable是無效的語法。 如果newView.variable不是View類型,那麼這是一個問題。

如果已經聲明newView,那麼將使用int myValue = newView.variable(即,假定它是int類型)訪問variable

一個例子是:

// Somewhere in your code, you declare your object 
UIView *otherView = [[UIView alloc] init]; 

// Somewhere else, you set a variable of your object 
otherView.backgroundColor = [UIColor blackColor]; 

// Again, somewhere else you want to access that value 
UIColor *thatColor = otherView.backgroundColor; 

我希望這說明它不夠好。

+0

感謝您的解釋!我終於明白了,罪魁禍首是我沒有將視圖控制器繪製到故事板的視圖中。-_-。至少我2天的挫折已經結束了。 – daspianist

0

這是你想要做什麼的正確描述?你有一個視圖控制器(大概是課程中的計算器類型視圖控制器),你想在視圖控制器(其視圖有計算器按鈕)和視圖控制器之外進行通信?

如果是這樣,這裏是你應該採取的步驟:你想從一個委託接收信息

在你看來:

聲明與要授人以實現該方法的@protocol。在視圖的頭文件中聲明符合前述代理的屬性:@property (nonatomic, weak) delegate<NameOfTheProtocol> delegate;

在要作爲委託的視圖控制器中,聲明它符合協議:MyClass: UIViewController <NameOfTheProtocol>。在該視圖控制器的實現文件中,實現該協議的方法。如果您創建了想要接收信息的視圖,請將其設置爲您的視圖控制器的delegate屬性。

通過他們之間的信息(我不知道你想傳遞什麼樣的信息),您的協議方法可能是這樣的:-(CGPoint)pointToDrawAtGivenPosition:(CGPoint)point

在你認爲有委託屬性,你可以在drawRect中有所作爲像:

CGPoint pointToDrawAt = [self.delegate pointToDrawAtGivenPosition:CGPointMake(100, 100)]; //Now draw that point or whatever.

基本上,視圖要求其委託作出關於在哪裏畫的東西決定。它將一些信息傳遞給委託人,委託人以正確的位置作出響應,以供視圖繪製。

+1

感謝您的真實詳細的演練 - 代表團部分特別有幫助。我發現我沒有控制 - 將視圖控制器拖到故事板中的視圖中,所以兩者不會互相交談......所以現在一切正常。無論如何感謝您的幫助!^_ ^ – daspianist

相關問題