Окно состояния процесса прокрутки - PullRequest
1 голос
/ 21 ноября 2011

Как часть приложения Mac, над которым я работаю, пользователь заполняет экран, заполненный всем, и затем нажимает кнопку «процесс». Выполняются правки, и если все проходит редактирование, выполняется несколько минут, которые либо заканчиваются нормально, либо нет. Я хотел бы, чтобы этот процесс выплевывал серию сообщений о состоянии и обработке в отдельное окно прокрутки, чтобы, если что-то пойдет не так, пользователь мог вернуться к журналу и посмотреть, есть ли там что-нибудь.

Какие объекты и методы для меня лучше всего рассмотреть и использовать для этого типа обработки?

Добавлено 11/24/2011

Согласно первому предложению, я создал второй XIB, создал NSWindowController, чтобы сопоставить его и собрать все вместе в качестве подготовительной работы. Когда кнопка в нажатом в приложении делегате, у меня эта вещь делает следующее:

- (IBAction)runButtonPressed:(id)sender {

RunResultWindow *wc;

wc = [[RunResultWindow alloc] initWithWindowNibName:@"RunResultWindow"];

[wc showWindow:self];

}

RunResultWindow - это имя XIB и класса NSWindowController, который его контролирует. Я также добавил кнопку «Готово» и связал ее с намерением, чтобы результаты процесса заполнили текстовое окно, а затем зависали там, пока пользователь не нажмет кнопку «Готово» или «Завершить», или что бы я ни вызвал, вызывая кнопку.

На самом деле окно отображается, когда я нажимаю кнопку в главном окне, но когда код кнопки заканчивается, окно исчезает. Ясно, что я пропускаю (важный) шаг.

Как только я получаю окно, я могу добавить текстовое представление и т. Д. И заставить это работать. Я хотел бы, чтобы новое окно получило фокус, а затем закрылось, когда пользователь нажимает кнопку «Готово».

Кроме того, я получил окно для оконного контроллера из метода окна (он возвратил адрес) и попробовал несколько методов фокусировки окна в методе windowDidLoad NSWindowController, но без кубиков.

Еще раз спасибо за любую информацию, которую я могу получить по этому поводу.

Добавлено 25.11.2011

Duh. Может быть, если я сделаю экземпляр класса ivar вместо того, чтобы встраивать его в метод button, он будет работать, и да, это так. Le Oops.

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Звучит так, будто вы хотите поместить NSTextView в окно, где можно выбрать и прокрутить текст, но не редактировать его содержимое.

Вы можете вставить текст так же легко, как и метод insertText:.

0 голосов
/ 29 ноября 2011

Итак ... Комбинация NSTextView и insertText сработала несколько хорошо, но я не думаю, что это окончательный ответ. Во-первых, я понимаю, что insertText действительно предназначен только для пользовательского ввода, а не для фонового «системного» ввода в NXTextStorage объект. Я не уверен, почему, но это нормально, поэтому я буду избегать этого. Есть другие варианты. Я нашел методы beginEdit и endEdit, и они работают примерно так же, хотя у меня есть еще немного работы над некоторыми детальными методами делегатов.

Часть, которая не работает так хорошо, получает NSScrollView в окне для обновления по требованию. Я делаю вещи beginEdit и endEdit и могу корректно обновить объект NSTextStorage. Я могу сделать это несколько раз одним и тем же способом (кнопка тестирования в окне, содержащем представление прокрутки). Я могу сказать это, потому что print-object в debug показывает мне, что я ожидаю в нужное время. Однако я хотел бы иметь возможность показывать обновленный NSScrollView несколько раз во время суда по методу windowDidLoad. Представление прокрутки корректно обновляется, когда метод нажатия кнопки заканчивается.

Вот пример кода. Здесь я смешиваю insertText и методы редактирования начала / конца, но это было больше для теста, чем для любого кода, который я использовал бы для реального ...

(IBAction)FinishButtonPush:(id)sender {

    NSString *teststring;
    teststring = [NSString stringWithString: @"show"];
    [RunResultWindowTextView setString:teststring];
    teststring = [NSString stringWithString: @"show show"];
    [RunResultWindowTextView setString:teststring];
    teststring = [NSString stringWithString: @"show show show show"];
    [RunResultWindowTextView setString:teststring];
    [RunResultWindowTextView insertText:@"123"];
    NSTextStorage *tempTextStorage;

    tempTextStorage = [RunResultWindowTextView textStorage];

    [tempTextStorage beginEditing];
    [tempTextStorage replaceCharactersInRange:NSMakeRange(5,13)
                            withString:@"Hello to you!"];
    [tempTextStorage endEditing];

    [tempTextStorage beginEditing];
    [tempTextStorage replaceCharactersInRange:NSMakeRange(10,13)
                            withString:@"second change"];
    [tempTextStorage endEditing];

    [RunResultWindowTextView insertText:@"xxx123"];
    [RunResultWindowTextView insertText:@"xxx123567"];
}

Даже если объект NSTextStorage обновлен должным образом, представление прокрутки обновляется только после завершения метода. Насколько я понимаю, processEdit вызывается автоматически во время endEdit. Я добавил processEdit туда, чтобы посмотреть, и все, что я получил, было либо аварийно завершено, либо без изменений в зависимости от того, куда я положил команду.

Это было удалено, и я не уверен почему. Если вы собираетесь отправлять сообщения, пожалуйста, дайте мне знать, почему вы это сделали. Я не могу улучшить свой пост, если у меня нет идеи, что с ним не так ...

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