2012-10-05 44 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

相关问题