gpt4 book ai didi

objective-c - 以编程方式创建的 NSButtonCell 在单击时不会突出显示

转载 作者:行者123 更新时间:2023-12-03 17:26:45 25 4
gpt4 key购买 nike

我想让一个按钮出现在 TableView 中作为最后一行的第一个元素而不是普通数据,所以我创建了 NSTableView 的子类并覆盖了 preparedCellAtColumn:row: 方法以在最后一行。

- (NSCell *)preparedCellAtColumn:(NSInteger)column row:(NSInteger)row {
if(row < [self numberOfRows]-1) {
return [super preparedCellAtColumn:column row:row];
} else {
// if we're on the last row, we're going to add the button instead of data
if(column == 0) {
NSButtonCell *button = [[NSButtonCell alloc] initTextCell:self.buttonTitle];
[button setEditable:YES];
[button setSelectable:YES];
[button setBezelStyle:NSTexturedSquareBezelStyle];
[button setGradientType:NSGradientConvexWeak];
[button setButtonType:NSMomentaryPushInButton];
[button setHighlightsBy:NSBackgroundStyleLowered];
[button setAction:@selector(openAddDialog)];
[button setControlView:self];
return button;
} else {
NSTextFieldCell *emptyCell = [[NSTextFieldCell alloc] initTextCell:@""];
[emptyCell setEditable:NO];
[emptyCell setSelectable:NO];
return emptyCell;
}
}
}

幸运的是,该功能有效 - 按钮出现在最后一行,单击它时会调用 openAddDialog 选择器。然而,存在两个视觉问题:
1.单击该按钮时不会突出显示(按下)。
<罢工>2。单击时,表格会选择其上带有按钮的行。
我对 Objective C 和 Cocoa 还很陌生,所以我不太确定在哪里寻找这些问题的解决方案。为什么单击按钮时没有调用按钮的 setHighlighted 方法? 在 NSTableView 选择一行之前调用什么方法,以便我可以覆盖它并告诉它不要选择最后一行?

我最终通过覆盖表子类中的 selectRowIndexes:byExtendingSelection: 函数解决了我的第二个问题,并且只是不将最后一行索引传递给 super 函数。

最佳答案

我非常确定您必须使该列可编辑才能激活其中的 UI 元素。

顺便说一句,将某种控件放在表的末尾通常是一个坏主意,尤其是影响整个表的控件。表应该由逻辑重复单元组成。在表中放置唯一的内容会导致用户混淆并可能隐藏功能。您很可能希望将按钮移到表格本身之外。

关于objective-c - 以编程方式创建的 NSButtonCell 在单击时不会突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com