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
и запустите его снова!