iOS 5: странное поведение addSubview

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

Вот как я открываю другое представление:

- (IBAction)openView {  
    NSLog(@"View is loading");
    @try {
        UINavigationController *nav = [storyboard instantiateViewControllerWithIdentifier:@"viewOpenSegue"];
        [nav setModalPresentationStyle:UIModalPresentationFullScreen];
        [self presentModalViewController:nav animated:YES];
    }
    @catch (NSException *exception) {
        NSLog(@"Error");
    }
    @finally {
        NSLog(@"View loaded");
    }
}  

Пока все хорошо. Я получил журнал до открытия представления и второй журнал после его полной загрузки.

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

NSArray *subviewArray2 = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil];
loadingView = [subviewArray2 objectAtIndex:0];  

Вот как я загружаю свое представление. И я добавляю/удаляю вот так:

[self.view addSubview:loadingView];
//@try block
//@catch block
//@finally
{  
[loadingView removeFromSuperview];  
}  

Я ожидаю, что вид появится и исчезнет на экране. Но он появляется примерно на 1 миллисекунду прямо перед тем, как появляется нажатое представление, а затем внезапно исчезает.

Если я добавлю этот способ под viewDidLoad, он появится.

Я видел подобные вопросы, но они не помогли мне. Кто-нибудь знает? Должен ли я попробовать что-то еще?

Заранее спасибо.


person kubilay    schedule 17.04.2012    source источник
comment
Мне любопытно, почему вы используете блоки @try/@catch?   -  person SomaMan    schedule 17.04.2012
comment
потому что я думал, что это лучшее решение для определения границ активности. он показывает загрузку (предположительно ...) при попытке, выдает ошибку, если она есть, затем, наконец, удалите загрузочную панель.   -  person kubilay    schedule 17.04.2012


Ответы (3)


У этого файла пера View.xib есть владелец файла?

person Smin    schedule 17.04.2012

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

person freelancer    schedule 17.04.2012
comment
Я не хочу загружать в первый раз, я хочу загружать после того, как я нажму на кнопку. Поэтому я пишу код под функцией (IBAction)openView. Он уже загружается в первый раз, если я использую viewDidLoad, он не загружается, если я попытаюсь позже. - person kubilay; 17.04.2012
comment
что появляется примерно за 1 миллисекунду прямо перед тем, как появится нажатое представление, а затем внезапно исчезнет? - person freelancer; 17.04.2012
comment
это не важно. проблема в том, что он не появляется, когда открывается новый вид. - person kubilay; 17.04.2012

Это было потому, что я не использовал selector. См. этот вопрос.

Вот оптимизированный код:

[self.view addSubview:loadingView];  
[self performSelector:@selector(openView) withObject:nil afterDelay:0];
person kubilay    schedule 23.04.2012