iOS First Launch view

Я пытаюсь поставить первый вид запуска. Я уже пробовал кое-что, но это не сработает.

Вот что у меня есть:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    UIPageControl *pageControl = [UIPageControl appearance];
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    pageControl.backgroundColor = [UIColor whiteColor];

    return YES;

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"yourCondition"])
    {
        //launch your first time view
        self.viewController = [[viewController alloc] initWithNibName:@"viewController" bundle:nil];
    }
    else
    {
        //launch your default view
        self.viewController = [[viewController alloc] initWithNibName:@"defaultViewController" bundle:nil];

        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"yourCondition"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

}

Почему-то это не работает, это говорит о том, что viewController не найден как тип объекта AppDelegate. Есть идеи?

3 ответа

Если вы ничего не делаете, появится начальный контроллер представления раскадровки. Если вы хотите, чтобы что-то еще произошло, то вы хотите установить self.window.rootViewController, В этом случае вам также нужно будет создать и показать окно вручную.

Есть несколько вещей не так с вашей реализацией application:didFinishLaunchingWithOptions: что определенно является причиной ваших неприятностей.

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

При этом следующий код должен видеть вас правильно:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self setWindow:[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];

    UIViewController *viewController = nil;

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"yourCondition"])
    {
        //launch your first time view
        viewController = [[viewController alloc] initWithNibName:@"viewController" bundle:nil];
    }
    else
    {
        //launch your default view
        viewController = [[viewController alloc] initWithNibName:@"defaultViewController" bundle:nil];

        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"yourCondition"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

    [[self window] setRootViewController:viewController];

    [[self window] makeKeyAndVisible];

    return YES;
}

Реализация по умолчанию application:didFinishLaunchingWithOptions: ожидает, что вы вернете логическое значение, указанное в сигнатуре метода.

Вы также пропускаете важный вызов в начале метода, который устанавливает основной NSWindow для вашей заявки, которая будет представлена.

Как указывает @matt, ваш код ожидает, что у вас есть свойство в AppDelegate, которое будет содержать вашу ссылку на viewController, Из того, что вы упомянули об ошибке компиляции, может показаться, что у вас нет этой настройки отношений. Как бы то ни было, это может вам и не понадобиться, так как вы можете достичь того же, установив rootViewController собственность вашего NSWindow,

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

У меня есть решение в Swift и я опубликовал пример на GitHub, чтобы поделиться им:

https://github.com/AppLogics/DynamicEntryPointExample-iOS

Я объясню здесь с упрощенной версией этого, чтобы динамически / программно установить точку входа между синим и красным View Controller.

Убедитесь, что в конструкторе интерфейсов вы удалили все точки входа из вашей раскадровки, для этого вам нужно будет выбрать ViewController с Entry Point и снимите флажок Is Initial View Controller вариант под View Controller раздел:

введите описание изображения здесь

Затем вам необходимо убедиться, что все потенциальные точки входа назначены. Storyboard Idкак вы будете использовать это в коде из AppDelegate.swift файл. Этот пример использует blue а также red

введите описание изображения здесь

Далее вы должны отредактировать AppDelegate.swift файл. Сначала объявите константу для проверки и решите, какой View Controller отображать изначально, в этом случае:

let blueEntryPoint = true

Затем вставьте код по умолчанию didFinishLaunchingWithOptions Функция между комментариями: // Override point for customization after application launch. и утверждение: return true вот так:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    //checking to see if the blue is true or false
    if blueEntryPoint {
        //Showing blue View Controller
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let mainViewController = storyboard.instantiateViewController(withIdentifier: "blue")
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = mainViewController
        self.window?.makeKeyAndVisible()
    } else {
        //Not showing blue, i.e. will show red View Controller
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let surveyViewController = storyboard.instantiateViewController(withIdentifier: "red")
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = surveyViewController
        self.window?.makeKeyAndVisible()
    }

    return true
}

Запустите это, затем измените blueEntryPoint в false и запустите его снова!

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