0

我的问题与 CS193p 中的作业 3 有关。

我很难进入drawRect我的视图以接收从我的视图控制器传递的信息。基本上,我的目标是将特定于视图的信息(如self.view.size.width)传递给控制器​​,让它进行一些修改(如result = self.view.size.width * 2),然后传result回,drawRect以便它可以获取新信息并绘制它。我很确定我的代表团设置正确,并且确实尝试了一系列潜在的解决方法:

  • 制作一个公共视图@property,我可以controller.m通过我的方式访问它

    查看 *newView someResult = newView.variable

然后我会尝试从我的view.mvia

self.variable
  • 使用在我的视图中设置的方法@protocal,我尝试通过这些方法传递数据myView.dataSource someMethod:someData

但到目前为止,这些目前都没有工作(即我的self.variable结果总是为0,这表明没有数据传递给它)。非常感谢您的帮助!

更新:

罪魁祸首是,在情节提要中,我没有控制拖拽 View Controller 到 View,因此 Controller 从未连接过……但至少现在它可以工作了。^_^

4

2 回答 2

0

View *newView someResult = newView.variable不是有效的语法。如果newView.variable不是类型View,那么这是一个问题。

如果newView已声明,您将使用variableusing访问int myValue = newView.variable(即假设它是 int 类型)。

一个例子是:

// 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;

我希望这能很好地解释它。

于 2012-10-05T15:50:29.150 回答
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.

基本上,视图要求它的代表决定在哪里绘制一些东西。它将一些信息传递给委托,委托以正确的位置进行响应以供视图绘制。

于 2012-10-06T01:11:17.663 回答