Модальный вид не перерисовывается? - PullRequest
0 голосов
/ 23 сентября 2011

Я разрабатываю приложение, которое должно при запуске загружать JPEG с веб-сайта.

Отображается заставка, затем приложение пытается получить веб-адрес из файла. Если файл отсутствует, я открываю модальное представление (как UIModalPresentationFormSheet), которое имеет текстовое представление для ввода пользователем адреса - адрес затем сохраняется в файле.

Пользователь нажимает кнопку ОК, и делается попытка получить JPEG. Если адрес был неправильным или JPEG не находится на веб-сервере, модальное диалоговое окно должно быть открыто заново, чтобы пользователь мог изменить веб-адрес на правильный.

Контроллер представления заставки содержит следующие методы:

- (void)openAddressDialog
{
    serverView *viewController = [[serverView alloc]init];
    [viewController setServerAddress:[businessLogic serverAddress]];
    [viewController setDelegate:self];
    [viewController setModalPresentationStyle:UIModalPresentationFormSheet];
    [self presentModalViewController:viewController animated:YES];
}

Интересно, что когда я вызывал метод openAddressDialog из метода viewDidLoad, модальное представление не появлялось. Мне пришлось переместить его в метод viewDidAppear. Таким образом, по-видимому, представление должно находиться в определенном состоянии, прежде чем оно будет принимать модальные представления.

- (void)closeDialog:(UIViewController *)dialogController:(Boolean)actionRequired
{
    // If action required, get the server address from the dialog
    if (actionRequired)
    {
        serverView *viewController = (serverView *)dialogController;   
        NSString *address = [[viewController serverAddress]copy];
        [businessLogic setServerAddress:address];
        [self dismissModalViewControllerAnimated:YES];

        if (![logoImage image])
        {
            [logoImage setImage:[businessLogic eventLogo]];

            if (![logoImage image])
            {
                [self openAddressDialog];
            }            
        }

    }
    else
    {
        exit(0);
    }
}

Это метод делегата, вызываемый обратно из модального представления, когда пользователь коснулся OK или Отмена. Параметр actionRequired указывает, что нажата кнопка OK. И если это так, новый адрес сервера выбирается из модального представления, а модальное представление отклоняется. Предпринята попытка получить JPEG с нового адреса (в классе бизнес-правил), и если файл все еще не может быть найден, первый метод, показанный выше (openAddressDialog), вызывается снова, чтобы пользователь мог снова исправить адрес.

Модальный вид отображается нормально с первого раза, но не появится снова, если пользователь ввел неправильный адрес. Имеет ли это какое-то отношение к тому, что я пытался представить модальное представление так быстро после его отклонения?

Я довольно новичок в разработке для iPad, поэтому буду признателен за любые советы.

Еще одна вещь, которая, возможно, демонстрирует мою неопытность в C ++, заключается в том, что ... если я объявлю закрытый метод в файле m, давайте назовем его

- (void) methodB

и этот метод вызывает другой закрытый метод, давайте назовем его

- (void) methodA

methodA должен быть определен в файле m раньше, чем methodB. Если я также хочу, чтобы methodA вызывал methodB, я захожу в тупик. Единственный способ, о котором я знаю, - это объявить methodB в файле h - что делает его общедоступным. Как мне написать этот сценарий, чтобы внешний мир не видел ни один из методов?

1 Ответ

0 голосов
/ 23 сентября 2011

если использовать для создания пера к serverView, тогда сделайте вот так

  serverView *viewController = [[serverView alloc]initWithNibName:@"serverView" bundle:nil];
...