У меня есть базовое приложение с экраном входа/регистрации и основным контроллером, который отображается после входа пользователя в систему. Кроме того, когда приложение открывается через URL-адрес, я хочу показать модальный контроллер.Как определить логин/регистрацию и рабочий процесс главного контроллера?
Я пробовал несколько шаблонов о том, как это сделать, и остановился на шаблоне ниже. Однако он работает, я считаю, что должен быть лучший способ сделать это, чем то, что я делаю ниже. Проблема с ниже, что она не открывает контроллер модальное, когда приложение открывается через URL
Вот что я делаю
class AppDelegate
attr_reader :window
include AFNetworkingClient
def application(application, didFinishLaunchingWithOptions:launchOptions)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
if AppHelper.user_set?
initAFNetworkingClient
Color.fetch(AFMotion::Client) do |data|
main_controller = ColorController.alloc.initWithData(data)
@window.rootViewController = UINavigationController.alloc.initWithRootViewController(main_controller)
end
else
main_controller = WelcomeController.alloc.initWithNibName(nil, bundle: nil)
@window.rootViewController = UINavigationController.alloc.initWithRootViewController(main_controller)
end
@window.makeKeyAndVisible
true
end
# This doesn't show the modal controller for some reason
def application(application, openURL:url, sourceApplication:sourceApp, annotation:annotation)
Color.fetch(AFMotion::Client) do |data|
main_controller = ColorController.alloc.initWithData(data)
ctlr = UINavigationController.alloc.initWithRootViewController(self.add_color_controller)
ctlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical
ctlr.delegate = self
self.presentViewController(ctlr, animated:true, completion:nil)
end
end
def add_color_controller
@add_color_controller ||= MyModalController.new.tap do |ctlr|
ctlr.navigationItem.leftBarButtonItem = UIBarButtonItem.alloc.initWithBarButtonSystemItem(
UIBarButtonSystemItemCancel,
target: self,
action: :cancel)
ctlr.navigationItem.rightBarButtonItem = UIBarButtonItem.alloc.initWithBarButtonSystemItem(
UIBarButtonSystemItemDone,
target: self,
action: :done)
ctlr.navigationItem.rightBarButtonItem.enabled = false
end
end
def cancel
self.dismissViewControllerAnimated(true, completion:nil)
end
end
часть WelcomeController
class WelcomeController < UIViewController
include AFNetworkingClient
def viewDidLoad
super
rmq.stylesheet = WelcomeControllerStylesheet
rmq(self.view).apply_style :root_view
display_login unless AppHelper.user_set?
end
def display_login
@login = LoginController.alloc.init
@login.delegate = self
self.presentViewController(@login, animated:false, completion:nil)
end
....
end
Вопрос
- Есть ли лучший способ управлять рабочим процессом, о котором я упоминал выше?
- Как я могу исправить код выше, так что, когда я открываю приложение с URL он не бросает ошибку:
Application windows are expected to have a root view controller at the end of application launch