UITabBarController: переключитесь на контроллер другого представления программно

токенизатор Повышения класс может сделать этот вид вещи довольно простым:

#include 
#include 
#include 
#include 

using namespace std;
using namespace boost;

int main(int, char**)
{
    string text = "token, test   string";

    char_separator sep(", ");
    tokenizer< char_separator > tokens(text, sep);
    BOOST_FOREACH (const string& t, tokens) {
        cout << t << "." << endl;
    }
}

Обновленный для C++ 11:

#include 
#include 
#include 

using namespace std;
using namespace boost;

int main(int, char**)
{
    string text = "token, test   string";

    char_separator sep(", ");
    tokenizer> tokens(text, sep);
    for (const auto& t : tokens) {
        cout << t << "." << endl;
    }
}

8
задан Ionic Walrus 8 July 2009 в 00:00
поделиться

3 ответа

У меня это работает над версией 2.

Мой код находится здесь и отлично работает.

- (void)applicationDidFinishLaunching:(UIApplication *)application {

// Add the tab bar controller's current view as a subview of the window
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[window addSubview:tabBarController.view];
// Settings getLastViewIndex is just, 0,1,2,3 depending on what it was last set.
tabBarController.selectedIndex = [Settings getLastViewIndex];
2
ответ дан 5 December 2019 в 15:25
поделиться

Документы UITabBarController относительно selectedIndex объясняют это:

Это свойство номинально представляет индекс в массив Свойство viewControllers . Однако , если выбранный контроллер представления в настоящее время Подробнее навигация контроллер, это свойство содержит значение NSNotFound . Установка этого свойство изменяет выбранный вид контроллер к тому, что на обозначенный индекс в массив viewControllers . Чтобы выбрать Еще сам контроллер навигации, вы должен изменить значение selectedViewController свойство вместо этого.

В версиях iPhone OS до версии 3.0 это свойство отражает индекс выбранного элемента панели вкладок только. Попытка установить это значение на индекс контроллера представления, который не отображается на панели вкладок, но вместо этого управляется Подробнее навигацией контроллер, не влияет на .

Если я правильно понимаю, вам нужно вместо этого «изменить значение свойства selectedViewController », но вы дойдете только до выбора Еще навигационный контроллер, а не VC внутри него. Из тех же документов относительно selectedViewController :

Этот контроллер представления является тем, чей пользовательский вид в настоящее время отображается интерфейс панели вкладок. Указанный контроллер представления должен быть в массив viewControllers . Назначение нового контроллер представления для этого свойства изменяет текущий отображаемый вид а также выбирает соответствующую вкладку в панель вкладок. Смена взгляда контроллер также обновляет selectedIndex свойство соответственно. Значение по умолчанию для этого свойства - nil .

В iPhone OS 3.0 и новее вы можете используйте это свойство, чтобы выбрать любой из просмотреть контроллеры в viewControllers свойство. Эта включает контроллеры представления, которые управляется Подробнее навигация контроллер и чьи элементы панели вкладок не отображается на панели вкладок. Вы можете также используйте его, чтобы выбрать Подробнее сам контроллер навигации, который доступны из Свойство moreNavigationController . До iPhone OS 3.0 можно было выберите только Подробнее навигацию контроллер и подмножество представления контроллеры, чей элемент панели вкладок был видимый. Попытка установить это свойство к контроллеру представления, чей элемент панели вкладок не был виден effect.

As for a workaround, I wonder if the More nav controller's pushViewController:animated: method would come in handy here? Give each view a unique tag number (which you could associate with an appropriate VC behind the scenes). Save the tag for whichever VC was last active.

At startup-time, select the appropriate view in the tab bar controller. If the view's tag isn't associated with the VCs for the first four tab items, it must be within the More nav controller. Locate the VC, push it onto the More nav controller's stack, then select the More nav controller outright.

I haven't tried this, but it might be worth an experiment! The only potential gotcha (and it could be a biggie) is that you will have to push that VC after the More nav controller is setup, not before.

2
ответ дан 5 December 2019 в 15:25
поделиться

Может это поможет. Что я сделал, так это сохранил индекс выбранного элемента панели вкладок. Когда приложение запускается, я проверяю, не превышает ли это число 3, если это так, я устанавливаю выбранный контроллер представления панели вкладок как дополнительный контроллер навигации, а затем просто нажимаю сохраненный контроллер представления панели вкладок индекса с контроллера дополнительной навигации.

if ([[WSFUserDefaults sharedInstance] savedTabBarLocation] > 0) {

            if ([[WSFUserDefaults sharedInstance] savedTabBarLocation] > 3) {
                UIViewController *selectViewController = [tabBarController.viewControllers objectAtIndex:[[WSFUserDefaults sharedInstance] savedTabBarLocation]];
                [tabBarController setSelectedViewController:tabBarController.moreNavigationController];
                [tabBarController.moreNavigationController popToRootViewControllerAnimated:NO];//make sure we're at the top level More
                [tabBarController.moreNavigationController pushViewController:selectViewController animated:NO];
            }
            else {
                [tabBarController setSelectedIndex:[[WSFUserDefaults sharedInstance] savedTabBarLocation]];
            }
        }
7
ответ дан 5 December 2019 в 15:25
поделиться