我的问题与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,这表明没有数据传递给它)。非常感谢您的帮助!
更新:
罪魁祸首是,在故事板中,我没有控制 - 将视图控制器拖到视图,因此控制器从未连接......但至少现在它可以正常工作。 ^ _ ^
答案 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.
基本上,该观点要求其代表决定在哪里画画。它将一些信息传递给委托,并且委托以正确的位置响应绘制的视图。