Эквивалент "ListBox" в XCode? - PullRequest
8 голосов
/ 14 июня 2011

Вы знаете Visual Studio, этот удивительный элемент под названием "ListBox"? Просто поле, которое будет перечислять кучу строк.

Сейчас я работаю с XCode и обнаружил этот класс в конструкторе интерфейсов "NSScrollView". Кажется, можно перечислить мне пару строк. Там написано, что внутри есть NSTextView, но как мне получить к нему доступ?

Я даже не уверен, является ли NSScrollView правильным решением, которое мне нужно, но если бы я мог просто получить доступ к NSTextView внутри него, я думаю, этого будет достаточно.

Ответы [ 3 ]

3 голосов
/ 14 июня 2011

См. NSTableView .

Что касается перехода к текстовому представлению в представлении с прокруткой, создайте выход Interface Builder (IBOutlet) и подключите его к самому текстовому представлению, а не к представлению с прокруткой.

1 голос
/ 18 июня 2011

Чтобы перейти к текстовому представлению внутри прокрутки;вам нужно выбрать контроллер с определенной розеткой;нажмите и удерживайте элемент управления, а затем перетащите синюю линию соединения от контроллера к верхней строке вида прокрутки;затем просто дождитесь появления синей линии;Затем вам будет предложено связать вашу розетку с текстовым представлением.

0 голосов
/ 12 мая 2018

Ответ Джоша выше, чтобы использовать NSTableView, является правильным.Для тех, кто не знаком с этим, это может показаться гораздо более сложной задачей, чем на самом деле оказывается.Надеюсь, это сэкономит людям время.

Вместо того, чтобы бороться с NSTableCellView предположениями, вы можете создать любой тип простого представления и использовать автоматический макет (или даже вернуть простой NSTextView. Это то, что я сделал дляполучить больше контроля над макетом моих текстовых строк:

@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.
}

В основном это простой список.Для получения дополнительной информации о том, как связать таблицу систочники данных и более сложные проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...