Как запустить модальное представление из пользовательского UITabBar? - PullRequest
3 голосов
/ 30 августа 2011

Я построил UITabBar с приподнятым центром из этого местоположения GitHub .

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

Кто-нибудь использовал idev-рецепты RaisedCenterTabBar с удачей?Как вы реализовали модальный лист, который там появляется?

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

Спасибо!

Ответы [ 2 ]

5 голосов
/ 20 ноября 2013

Это было моё решение, оно было НАИБОЛЕЕ чистейшим способом, который я нашел, чтобы сделать это ... Я действительно надеюсь, что это поможет, я потратил часы на поиски лучших способов.

Я настроил делегата "UITabBarController"который подключается непосредственно к моему интерфейсу вкладок, встроенному в мою раскадровку.

** Не забудьте включить делегат "tabBarController" в заголовочный файл

** Обратите внимание, что этот метод обратного вызова НЕ является«didSelectViewController», а не «shouldSelectViewController».Этот метод обрабатывает запрос до выбора вкладки, и это именно то, что вам нужно, поэтому вы можете ОСТАНОВИТЬ запрос до того, как он произойдет ... Таким образом, вам не нужно сохранять текущий индекс, на котором вы находитесь, передавать его ився эта ерунда.

Затем я просто проверяю, какая вкладка будет выбрана (на основе заголовка контроллера представления.

** Также: это мой код, измените его, как необходимо для вашего кодаНо принципы должны остаться. Мой "executeSegueWithIdentifier" на самом деле является ручным переходом, подключенным к моему контроллеру вкладок, который открывается в модальном режиме. Этот код отлично работает для меня.

 -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

     if([[viewController title] isEqualToString:@"tellvc"])
     {
         [self performSegueWithIdentifier:@"shareModelViewController" sender:Nil];
         return NO;
     }
     else
     {
         return YES;
     }

 }
2 голосов
/ 01 сентября 2011

У меня есть нечто похожее в моей программе, над которой я работаю, и был бы рад показать вам, как я это делаю. У меня есть несколько viewControllers в TabBar. Я создаю кнопку «Плюс» в зависимости от того, какой VC я решу, он появится первым на экране во ViewDidLoad.

    // Create a plus button that appears on the tabBar
UIImage *plusButton = [UIImage imageNamed:@"plusbutton.png"];
UIView *tabBarView = [[self tabBarController] view];
addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton setFrame:CGRectMake(127.0, 432.0, [plusButton size].width, [plusButton size].height)];
[addButton setBackgroundImage:plusButton forState:UIControlStateNormal];
[tabBarView addSubview:addButton];
[addButton addTarget:self action:@selector(scalePicker:) forControlEvents:UIControlEventTouchUpInside];    

Я делаю кнопку подвидом представления tabBarController. Позже в реализации этого VC у меня есть метод scalePicker, который создает и создает экземпляр одного из моих других VC и представляет его модально. Вот код для этого: (примечание: это метод, который я установил в качестве цели для кнопки плюс в приведенном выше коде)

    -(void) scalePicker:(id)sender
{
    // create the view scalePicker, set it's title and place it on the top of the view hierarchy
sp = [[ScalePickerVC alloc] init];
[self presentModalViewController:pickerNavController animated:YES];
}

Надеюсь, это поможет тебе, Удачи!

...