iPhone: добавить «загрузочный» подвид - PullRequest
1 голос
/ 16 августа 2010

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

При этом я ничего не вижу!

Вот как я пишу свой метод:

- (void)showLoading {
    UIView *loading = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    loading.backgroundColor = [UIColor blackColor];
    UILabel *txt = [[UILabel alloc] initWithFrame:CGRectMake(198, 9, 94, 27)];
    txt.text = @"Loading...";
    txt.textColor = [UIColor whiteColor];
    [loading addSubview:txt];
    [super.view addSubview:loading];
    [super.view bringSubviewToFront:loading];
    [loading release];
    [txt release];
}

Я делаю это совершенно неправильно?

EDIT: Я добавил его в метод viewDidLoad, и он работает так, как я хочу:

loading = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    loading.backgroundColor = [UIColor blackColor];
    UILabel *txt = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 94, 27)];
    txt.text = @"Loading...";
    txt.textColor = [UIColor whiteColor];
    [loading addSubview:txt];
    [txt release];
    [self.view addSubview:loading];
    [self.view bringSubviewToFront:loading];

Но при загрузке из метода он, кажется, отстает, и немного не появляется.

Ответы [ 2 ]

2 голосов
/ 16 августа 2010

Хотя это не дает прямого ответа на ваш вопрос, я бы порекомендовал извлечь MBProgressHUD из GitHub и использовать его вместо статической метки. Выглядит лучше, меньше кода для непосредственного сопровождения и т. Д. Вы можете найти его по адресу http://github.com/matej/MBProgressHUD

Я использую его, создав подкласс UITableViewController и определив несколько методов для отображения и скрытия представления HUD. Оттуда я вызываю каждый соответствующий метод, когда загружаюсь или делаю загрузку.

В частности, у меня есть четыре метода: -hudView, -showLoadingUI, -showLoadingUIWithText: и -hideLoadingUI.

-hudView создает новый объект MBProgressHUD, если он еще не существует, и добавляет его в текущее представление ([self.view addSubview: hudView]).

-showLoadingUI вызывает -showLoadingUIWithText: с заголовком по умолчанию -showLoadingUIWithText: просто показывает MBProgressHUD и устанавливает для него значение метки (self.hudView.labelText = @ "foo";).

-hideLoadingUI скрывает hudView ([self.hudView hide: YES]).

1 голос
/ 16 августа 2010

Во-первых, я не думаю, что в UIView есть метод с именем init. Вы можете просто позвонить супер этого. Подходящий метод, который вы должны вызвать - - (id)initWithFrame:(CGRect)aRect. Рамка - это позиция, размер представления, которое вы хотите отобразить. Подробнее здесь

Другое дело, почему вы звоните [super.view addSubView:], я думаю, это должно быть self.view, не так ли?

...