NSView/UIView有数据源正常吗?
It's normal for NSView/UIView to have a datasource?
例如,我有一个绘制函数图的自定义视图。
首先,我需要从用户那里获取函数参数。
在我需要计算 x/y 并在视图上绘制此点之后。
那么,我可以使用此视图的数据源在 -drawRect:
中绘制绘图吗?或者它违反了 MVC 模式?
我认为你是 NSView 的子class 并创建一个自定义 class 来绘制绘图?如果是这样,那么是的,这是正确的设计模式。例如 NSTableView 就是这样设计的。您倾向于在 drawRect:
方法中绘制不需要数据源的内容。然后在 drawRect:
方法之外调用数据源,例如在 reloadData
方法中。
编辑重载数据示例:
- (void)reloadData{
if([datasource respondsToSelector:@selector(points:)]) {
for(NSValue *value in [datasource points]) {
NSPoint point = value.pointValue;
// Setup layer here and add to view.layer
}
}
}
这个问题更适合 http://programmers.stackexchange.com。
答案是肯定的,使用数据源。为您的视图创建协议,例如 UITableViewDataSource
用于 UITableView
。您可能还需要一个代表,例如 UITableViewDelegate
代表 UITableView
.
例如,我有一个绘制函数图的自定义视图。
首先,我需要从用户那里获取函数参数。
在我需要计算 x/y 并在视图上绘制此点之后。
那么,我可以使用此视图的数据源在 -drawRect:
中绘制绘图吗?或者它违反了 MVC 模式?
我认为你是 NSView 的子class 并创建一个自定义 class 来绘制绘图?如果是这样,那么是的,这是正确的设计模式。例如 NSTableView 就是这样设计的。您倾向于在 drawRect:
方法中绘制不需要数据源的内容。然后在 drawRect:
方法之外调用数据源,例如在 reloadData
方法中。
编辑重载数据示例:
- (void)reloadData{
if([datasource respondsToSelector:@selector(points:)]) {
for(NSValue *value in [datasource points]) {
NSPoint point = value.pointValue;
// Setup layer here and add to view.layer
}
}
}
这个问题更适合 http://programmers.stackexchange.com。
答案是肯定的,使用数据源。为您的视图创建协议,例如 UITableViewDataSource
用于 UITableView
。您可能还需要一个代表,例如 UITableViewDelegate
代表 UITableView
.