Pri*_*yat 2 objective-c nstableview nscell nstableviewcell
我正在创建一个NSCell子类,它将一些对象直接绘制到视图上(使用drawInRect:fromRect:operation:fraction:respectFlipped:hints:),并且还NSButton使用NSView的addSubview:选择器绘制一个实例.
虽然使用第一种方法绘制的对象都是相关的,但是我在绘制NSButton正确的方法时遇到了问题.问题是我的NSButton实例会在正确的位置绘制,但多次覆盖.
我已经在互联网上研究了一段时间,有些人建议使用缓存,但我不确定这是否有效.(使用for循环包含按钮的数组肯定会导致慢滚动,因为我显示了大量数据...)
你会怎么做?我吠叫错了树吗?
这是相关代码:
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSRect _controlRect = cellFrame;
float _Y = cellFrame.origin.y;
NSRect _accessoryRect = NSMakeRect(_controlRect.size.width - 70.0f, _Y + 9.0f, 50.0f, 23.0f);
_switch = [self _choiceSwitch];
[_switch setFrame:_accessoryRect];
[controlView addSubview:_switch];
}
Run Code Online (Sandbox Code Playgroud)
长话短说:朋友们addSubview在画画时不要让朋友们.
这是管理控制接口的一个基本的,而不是特别好解释的方面,但是很重要.
让你的控制器决定子视图的"顺序",并且知道该按钮不应该被彻底弄乱(如果它在你的自定义绘图例程中被推挤,则不是这种情况).
很容易被困在这条小巷里,因为,嘿,我NSImageView在我的initWithFrame内容中添加了一个似乎没什么好看的 ......但是这只是你应该怎么做的,我猜...当你开始进行子类化时当你开始意识到原因时,NSControl等.
更新: 这是一个非常好的关于设计自定义控件的文章,附带同样优秀的示例项目 - 它体现了可以帮助避免此类问题的代码组织.例如..你会在控制器类中注意到他如何保持每个按钮的独立,独特和独立于其他视图的业务......
for (int butts = 0; butts < 3; butts++) {
NSRect buttFrame = NSMakeRect(0, butts * 10, 69, 10);
ExampleButt *butt = [[ExampleButt alloc]initWithFrame:buttFrame];
[mainView addSubview:butt];
}
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |