有示例类:
@interface OutlineViewController : NSOutlineView <NSOutlineViewDataSource, NSOutlineViewDelegate>
@end
@implementation OutlineViewController
- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
{
NSTableCellView *result = nil;
if (myCondition)
{
// ...
return result;
} else {
// how return defult?
}
}
@end
是否有可能从委托方法调用默认实现?
答案 0 :(得分:1)
只需使用super
关键字引用您在评论中所做的父类:
if (myCondition) {
//...your implementation here
}
else {
return [super outlineView:outlineview heightOfRowByItem:item];
}
对于加分,您可以使用-respondsToSelector:
检查super
是否对相关方法做出响应。
更新:我刚才注意到这种情况下的超类本身就是NSOutlineView
。这是非常令人困惑的 - 视图和视图控制器是不同的东西,所以从视图中调用一些“视图控制器”并不是一个好的计划。另请注意,文档建议"Subclassing NSOutlineView is not recommended."
尽管如此,我认为我现在更好地理解你的问题 - 我认为通过“默认实现”你的意思不是委托方法的继承版本,而是如果委托方法不是大纲视图将使用的行为实施完毕。在这种情况下,答案很简单:你可以简单地做NSOutlineView
本身会做的事情。 -outlineView:heightOfRowByItem:
的文档说:
实现此方法以支持具有不同行高的大纲视图。
另一方面,对于固定的行高,NSOutlineView
几乎肯定会使用它从rowHeight
继承的NSTableView
属性。因此,当您不想更改行高时,可以在这些情况下返回rowHeight
:
if (myCondition) {
//...your implementation here
}
else {
return outlineView.rowHeight;
}