Очистка NSScrollView и перерисовка содержимого - PullRequest
0 голосов
/ 16 октября 2019

У меня есть окно с NSScrollView, которое открывается нажатием кнопки, которая заполняется серией флажков, которые создаются путем анализа файла CSV. Приведенный ниже код вызывается во время awakeFromNib, и все работает просто так.

У меня также есть простой текстовый редактор, который позволяет пользователю изменять этот CSV-файл;значения, которые будут превращены в флажки, могут быть добавлены или удалены. Это также работает hunky dory.

Проблема заключается в том, что после запуска программы и после того, как пользователь открывает текстовый редактор, изменяет CSV и нажимает кнопку сохранения, когда пользователь нажимает кнопку, чтобы открыть окно флажка,изменения, внесенные пользователем в CSV, не будут отображаться до тех пор, пока не будет вызван перезапуск приложения и вызов awakeFromNib.

Я пытался удалить подпредставления, когда пользователь нажимает сохранить в текстовом редакторе, я также пытался удалить подпредставления, когда окно флажка открыто, но ничего не работает.

Поэтому мой вопрос заключается в том, как очистить содержимое NSScrollView, перезагрузить CSV и перерисовать флажки после того, как пользователь нажмет кнопку «Сохранить» или при открытии окна.

Я переместил код для создания флажков в его собственный метод, чтобы я мог вызывать его из другого класса (текстового редактора), и это прекрасно работает, но NSScrollView не перерисовывается с новыми значениями CSV.

Код для создания флажков:

-(void)awakeFromNib{
    [self populate];
}
-(void)populate {
    // Tried using removeFromSuperview here but no luck
    [_libraryWindow makeFirstResponder:button];
    NSBundle* myBundle = [NSBundle mainBundle];
    NSString* path = [myBundle pathForResource:@"conditionLibrary" ofType:@"csv"];
    NSString *sourceFileString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSString *sourceFileString2 = [sourceFileString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    NSArray *conditionArray = [sourceFileString2 componentsSeparatedByString:@","];

    int n = 0;
    int x = 18; //possition x
    int y = 640; //possition y

    for (id object in conditionArray) {
        if ([object isEqualToString:@"Support"] || [object isEqualToString:@"Canvas"] || [object isEqualToString:@"Paint Layer"] || [object isEqualToString:@"UV"] || [object isEqualToString:@"Surface"]){
            n = 0;
            y = y-40;
            NSTextField *textField;
            textField = [[NSTextField alloc] initWithFrame:NSMakeRect(18, y, 175, 18)];
            [textField setStringValue:object];
            [textField setFont:[NSFont fontWithName:@"Lucida Grande" size:11]];
            [textField setBezeled:NO];
            [textField setDrawsBackground:NO];
            [textField setEditable:NO];
            [textField setSelectable:NO];
            [[_libraryScrollView contentView] addSubview:textField];

            NSBox *line = [[NSBox alloc] init];
            [line setBoxType:NSBoxSeparator];
            [line setFrame:NSMakeRect(18, y, 850, 1.0)];
            [[_libraryScrollView contentView ] addSubview:line];
            x = 18;
            y = y-20;
        } else {
            n++;
            if (n == 6) { //n-1 = number of columns
                n = 1;
                x = 18; //indent
                y = y-20; //height of row
            }
            NSButton *checkbox = [[NSButton alloc] initWithFrame:NSMakeRect(x, y, 180, 18)];
            [checkbox setTitle: object];
            [checkbox setButtonType:NSSwitchButton];
            [checkbox setFont:[NSFont fontWithName:@"Lucida Grande" size:11]];
            [[_libraryScrollView contentView] addSubview: checkbox];
            x = x+180; //width of checkbox
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...