你知道Visual Studio,那个叫做“ListBox”的很棒的元素吗?只是一个列出一堆字符串的框。
我现在正在使用XCode,我在界面构建器“NSScrollView”中找到了这个类。它似乎能够列出几个字符串。它说它里面有一个NSTextView,但是,我如何访问它?
我甚至不确定NSScrollView是否是我需要的正确解决方案,但如果我可以简单地访问其中的NSTextView,我认为这就足够了。
答案 0 :(得分:3)
请参阅NSTableView。
至于在滚动视图中进入文本视图,创建一个Interface Builder插座(IBOutlet)并将其连接到文本视图本身,而不是滚动视图。
答案 1 :(得分:1)
进入滚动视图内的文本视图;您需要选择定义了插座的控制器;单击并按住控件,然后将蓝色连接线从控制器拖动到滚动视图的顶行;然后等待蓝线出现;然后,这将提示您将插座链接到文本视图。
答案 2 :(得分:0)
Josh上面的答案使用NSTableView是正确的。对于那些不熟悉它的人来说,它看起来像是一个比它实际上要大得多的任务。希望这能节省一些时间。
您可以创建任何类型的简单视图,并使用自动布局(甚至返回一个简单的NSTextView,而不是与NSTableCellView
假设作斗争。这是我为了更好地控制文本布局而采取的措施字符串:
@interface PreferenceTableViewCell : NSView
@property (nonnull, strong, readonly) NSTextField *tf;
@end
@implementation PreferenceTableViewCell
-(id)init
{
self = [super init];
if(self) {
self.translatesAutoresizingMaskIntoConstraints = NO;
self.autoresizesSubviews = YES;
_tf = [NSTextField labelWithString:@""];
_ tf.translatesAutoresizingMaskIntoConstraints = NO;
_tf.autoresizesSubviews = YES;
[self addSubview:_tf];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(10)-[_tf]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tf)]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:_tf attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
}
return self;
}
@end
然后把这个你需要的字符串列表(或控件,或其他):
_tv = [NSTableView new];
_tv.translatesAutoresizingMaskIntoConstraints = NO;
_tv.autoresizesSubviews = YES;
_tv.focusRingType = NSFocusRingTypeNone;
_tv.delegate = self;
_tv.dataSource = self;
_tv.rowHeight = 40; // Use this to adjust the height of your cell or do it in cell.
_tv.headerView = nil;
_tv.selectionHighlightStyle = NSTableViewSelectionHighlightStyleRegular;
_tv.allowsColumnReordering = NO;
_tv.allowsColumnResizing = NO;
_tv.allowsEmptySelection = NO;
_tv.allowsTypeSelect = NO;
_tv.gridStyleMask = NSTableViewGridNone;
[panel addSubview:_tv];
// TableView Column
NSTableColumn *col1 = [[NSTableColumn alloc] initWithIdentifier:@"c1"];
col1.resizingMask = NSTableColumnAutoresizingMask;
[_tv addTableColumn:col1];
然后在NSTableView
的委托和数据源设置的任何内容中添加以下方法:
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv
{
return stringArray.count;
}
-(NSView *)tableView:(NSTableView *)tv viewForTableColumn:(NSTableColumn *)tc row:(NSInteger)row
{
// This can be ANY NSView based control built as shown above.
PreferenceTableViewCell *cell = [PreferenceTableViewCell new];
cell.tf.stringValue = stringArray[row];
return cell;
}
-(void)tableViewSelectionDidChange:(NSNotification *)notification
{
// Code to do whatever when a list item is selected.
}
这基本上是一个简单的列表。有关如何将表绑定到数据源以及更复杂的问题的更多详细信息,请参阅NSTableView上的Apple Docs。