#iphone #objective-c #uitabbarcontroller
#iPhone #objective-c #uitabbarcontroller
Вопрос:
Я выяснял это со вчерашнего дня, но пока не понял, что правильно. Я добавил modalviewcontroller для моего контроллера представления загрузки поверх моего контроллера панели вкладок, и он отлично работает. Добавлен код в делегат приложения:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
[navController.navigationBar setTintColor:[UIColor blackColor]];
[window addSubview:rootController.view];
[window makeKeyAndVisible];
LoadingViewController *lvc = [[LoadingViewController alloc] initWithNibName:@"LoadingView" bundle:nil];
// Delegate added here
lvc.loadingDelegate = self;
[rootController presentModalViewController:lvc animated:YES];
[self URL];
[lvc release];
return TRUE;
}
Теперь я выполняю свой синтаксический анализ, и когда он завершен, я вызываю следующий код в другом представлении с именем XMLParsingView.m, где синтаксический анализ завершен.
- (void)handleLoadedApps
{
LoadingViewController *loading = [[[LoadingViewController alloc] init] autorelease];
//delegating to let the load view controller know to dimiss itself by defining disappear method in protocol
[loading.loadingDelegate disappear];
}
и при загрузке контроллера представления у меня есть метод, который вызывает dismissModalViewControlAnimated:
-(void)disappear{
[activity stopAnimating];
[activity removeFromSuperview];
[self removeFromSuperview];
[self dismissModalViewControllerAnimated:YES];
}
Но по какой-то причине он никогда не удалит представление и не загрузит его обратно в мой контроллер панели вкладок.
Здесь действительно нужна помощь, если кто-либо сталкивался с такими проблемами.
Саго
Ответ №1:
В вашем коде вы, кажется, создаете, без указателя, новый LoadingViewController и сразу же идете и отклоняете его. В делегате вашего приложения вы создаете свой первый loadingViewController с помощью кончика, модально представляете его в RootController, а затем выпускаете его. Поскольку вы хотите отклонить его вне вашего делегата приложения, у вас есть
3 варианта (от самого сложного до самого быстрого и наиболее разумного)
a) Наблюдение за ключом-значением в свойстве XMLParsingView из LoadingViewController, чтобы удалить себя после завершения задачи.
б) Используйте делегирование, чтобы сообщить LoadingViewController, когда задача завершится, чтобы закрыть себя.
c) Извлеките ваш RootController из вашего [делегата [UIApplication sharedApplication]], что означает, что вы должны предоставить RootController как свойство или с помощью метода и заставить RootController отклонить ваш модальный.
Комментарии:
1. @tsakoyan: Я отредактировал свой ответ выше с помощью вашего варианта b. Но все же это не помогает мне удалить контроллер модального вида. Я делаю это правильно, кстати?
2. LoadingViewController * загрузка происходит из ниоткуда, ее не следует использовать, когда я имел в виду делегирование, это было что-то вроде xmlParsingViewInstance.loadingDelegate = lvc; внутри вашего делегата приложения… тогда внутри XMLParsingView — (void)исчезнет {[self.loadingDelegate didFinishTask];}, однако я рекомендую (c) myapp_delegate *appDel = [делегат общего приложения UI]; [appDel.RootController dismissModalViewController анимирован: ДА];
3. Спасибо, брат!!! Ты потрясающий человек!!! Я бился головой последние 6 часов!!!! Проблема заключалась в том, что я не использовал опцию C и все это время выдавал мне ошибки. myapp_delegate *appDel = [делегировать [UIApplication sharedApplication] делегата]; [appDel.RootController dismissmodalviewcontrollerанимирован:ДА];
4. @tsakoyan: Последний запрос: Когда я пишу приведенный выше код, modalviewcontroller появляется после загрузки панели вкладок, что означает, что мы можем разглядеть, что он поступает снизу в виде другого вида. Как избежать этого, показав его сразу после заставки, а затем загрузив панель вкладок?
5. сделайте lvc переменной класса, предоставьте ее как свойство, чтобы вы могли получить к ней доступ / выпустить ее позже: lvc = [[Загрузка… выделить] …]; [окно добавляет SUBVIEW:lvc.view]; [окно вставляет SUBVIEW:RootController.view в INDEX:0]; а затем в любом месте, где завершается задача [appDel.lvc.view removeFromSuperview]; appDel.lvc = nil;
Ответ №2:
Вам нужно вызвать dismissModalViewControllerAnimated
на rootViewController
, а не на контроллер загрузочного представления.
Комментарии:
1. Вызванный -(void) исчезает{ [self.LoadingController dismissModalViewControllerAnimated:YES];} Но все равно он не удалит его.
2. Вам не нужно вызывать его в RootViewController. Он должен работать, вызывая его в самом viewcontroller.
3. Джейми: Это работает не так, как я написал в своем основном вопросе по приведенному выше коду. Вы думаете, я что-то не так делаю?
4. @Jamie Технически это работает, но вы должны вызвать его на родительском: «Родительский контроллер представления отвечает за отклонение контроллера модального представления, который он представил с использованием метода presentModalViewController: animated:».
5. Я попытался удалить модальное представление через родительский контроллер представления, который является моим контроллером панели вкладок, а также через загрузочный контроллер представления, но все еще не могу удалить контроллер модального представления. Можете ли вы действительно помочь мне, на какие проблемы мне следует обратить внимание подробнее?