#iphone #ios #uiview #uitabbarcontroller
#iPhone #iOS #uiview #uitabbarcontroller
Вопрос:
Мне нужно отобразить представление перед отображением приложения на основе вкладок, и как только пользователь нажимает кнопку, представление исчезает. Есть идеи?
Ответ №1:
вот некоторый код, который демонстрирует процесс. Вы можете вставить этот код в делегат приложения для запуска. Обратите внимание, что это спагетти-код, но я сделал это таким образом, чтобы вы могли видеть все шаги в одном месте. Обычно вы помещаете части этого кода в его собственный контроллер представления и классы.
это в appdelegate .. обратите внимание, что это не полностью протестировано на предмет утечек и прочего .. это предназначено для примера.
@synthesize tabViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIWindow *w = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];;
self.window = w; //property defined in the .h file
[w release];
//create the tab bar controller
UITabBarController *tbc = [[UITabBarController alloc]init];
self.tabViewController = tbc;
[w addSubview:tbc.view];
//create the two tabs
NSMutableArray *a = [[NSMutableArray alloc]init];
//create the first viewcontroller
UIViewController *vca = [[UIViewController alloc]init];
vca.view.backgroundColor = [UIColor redColor];
vca.title = @"View A";
[a addObject:vca];
[vca release];
//and the second
UIViewController *vcb = [[UIViewController alloc]init];
vcb.view.backgroundColor = [UIColor blueColor];
vcb.title = @"View B";
[a addObject:vcb];
[vcb release];
//assign the viewcontrollers to the tabcontroller
tbc.viewControllers=a;
//release the array now that its retained by the tabcontroller
[a release];
[tbc release]; //tabbarcontroller is retained by our property
UIViewController *vcc = [[UIViewController alloc]init]; //this is the popup view
vcc.view.backgroundColor = [UIColor whiteColor];
UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.titleLabel.text = @"Click here";
[b addTarget:self action:@selector(buttonDismiss:) forControlEvents:UIControlEventTouchUpInside]; //hook into the buttons event
b.frame = CGRectMake(10, 10, 300, 40);
[vcc.view addSubview:b]; //add it to the popup view
[tbc presentModalViewController:vcc animated:YES];
[self.window makeKeyAndVisible];
return YES;
}
-(void) buttonDismiss:(UIButton *)sender
{
[self.tabViewController dismissModalViewControllerAnimated:YES];
}
Комментарии:
1. нужно ли мне создавать экземпляры представлений внутри вкладки (ViewA и ViewB в вашем коде)? У меня уже есть приложение, созданное в виде панели вкладок, и все представления в нем. Я просто хочу отобразить одно представление до того, как пользователь увидит само приложение
Ответ №2:
Используйте UIViewController. Представьте этот контроллер в виде модального представления с контроллером панели вкладок. После этого отключите контроллер просмотра, чтобы скрыть его
Комментарии:
1. хорошо … где мне это сделать? где мне создать его экземпляр? где мне указать, чтобы он отображался? и где мне указать, чтобы обычная вкладка с другими представлениями отображалась, когда я закрываю начальный вид?
2. @irco Контроллер модального представления отображается поверх других ваших представлений. Он способен отключаться сам по себе, поэтому вам не нужно беспокоиться о последней половине ваших вопросов. Что касается того, когда создавать экземпляр и показывать его, вы можете сделать это в
viewDidAppear
методе вашего контроллера представления. Простоalloc
иinit
создайте новый VC и скажите текущему VC, чтобы он представил этот новый как контроллер модального представления.