iOS - 从视图控制器获取信息到视图中的drawRect

时间:2012-10-05 15:40:39

标签: ios cocoa-touch cs193p

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

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

  • 制作公开视图@property,我可以通过<{1}}访问

    查看* newView someResult = newView.variable

然后我会尝试从我的controller.m通过

访问
view.m
  • 使用我的视图self.variable 中设置的方法,我尝试通过@protocal
  • 传递数据

但到目前为止,这些目前都没有工作(即我的myView.dataSource someMethod:someData总是会出现0,这表明没有数据传递给它)。非常感谢您的帮助!

更新:

罪魁祸首是,在故事板中,我没有控制 - 将视图控制器拖到视图,因此控制器从未连接......但至少现在它可以正常工作。 ^ _ ^

2 个答案:

答案 0 :(得分:0)

View *newView someResult = newView.variable是无效的语法。 如果newView.variable不属于View类型,则表示存在问题。

如果已声明newView,您将使用variable访问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;

我希望这能解释得很清楚。

答案 1 :(得分: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.

基本上,该观点要求其代表决定在哪里画画。它将一些信息传递给委托,并且委托以正确的位置响应绘制的视图。