Подвид, общий для нескольких контроллеров представления, не отвечает

Я использую UIView чтобы показать занятость / обработку ключа для пользователя, и компоненты в представлении загрузки не отвечают на прикосновения пользователя. Позвольте мне уточнить мою проблему. У меня около 3 UIViewControllerс и в зависимости от ситуации один View от VieControllers будет отображаться. Я использую следующий код, чтобы изменить текущий вид

UIView *currentView = self.view;
UIView *theWindow = [currentView superview];

//Some other code 

[currentView removeFromSuperview];
[self.view setFrame: [tileCountViewController.view bounds]];
[theWindow addSubview:tileCountViewController.view];
[theWindow setFrame:[tileCountViewController.view bounds]];
[theWindow setFrame: [[UIScreen mainScreen] bounds]];

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

- (id)init {

    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    NSString *nibName = @"LoadingViewController";
    if(UIInterfaceOrientationIsLandscape(orientation)) {
        nibName = @"LoadingView-landscape";
    }
    else {
        nibName = @"LoadingView";
    }

    UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
    UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
    self = [super initWithFrame:portraitView.frame];

    [self addSubview:portraitView];
    [self bringSubviewToFront:portraitView];
    return self;

}

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

if(!loadingViewIndicator){
    loadingViewIndicator = [[LoadingView alloc]init];
}
[[[UIApplication sharedApplication]keyWindow]addSubview:loadingViewIndicator];
loadingViewIndicator.hidden = YES;

Всякий раз, когда мне нужно показать представление загрузки / занятости, я просто загружаю его так

[loadingViewIndicator performSelectorOnMainThread:@selector(startLoadingViewIndicator:) withObject:startMsg waitUntilDone:NO];
- (void)startLoadingViewIndicator:(NSString *)startMsg{
    self.hidden = NO;
    [self.superview bringSubviewToFront:self];
    [self.activityIndicator startAnimating];
    [self.loadingMessage setText:startMsg];
    self.loadingProgressView.progress = 0.0f;

    [self refreshPosition];
}

Все работает нормально, но компоненты в представлении загрузки не реагируют на прикосновения. Любая подсказка, что идет не так?

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

urlconnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately: YES];

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

[self performSelectorInBackground:@selector(startDownload) withObject:nil];

И тогда я добавляю runloop в загрузке, как

urlconnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately: YES];
CFRunLoopRun();

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

0 ответов

Другие вопросы по тегам