У меня есть окно с 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
}
}
}