如何创建像Parse一样的登录/登录iOS屏幕

时间:2014-03-18 16:54:09

标签: ios iphone authentication rubymotion

我试图获得类似于Parse登录/注册屏幕的行为。

方案 他们的LoginController呈现为模态。它有一个名为signup的按钮,按下该按钮后,signup屏幕显示为close按钮的另一个模态。 close按钮允许用户返回登录屏幕,当用户注册时,用户返回主屏幕。

到目前为止,我的一切工作只有一个问题。

问题

如何在用户注册MainController后将用户引导至SignController

到目前为止我做了什么

这是我到目前为止所做的,但是,在用户成功注册后,我无法将用户重定向到MainController

AppDelegate.rb

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
    @window.rootViewController = MainController.alloc.init
    @window.makeKeyAndVisible
    true
  end
end

MainController.rb

class MainController < UIViewController

  def viewDidLoad
    super
    @sessionId = NSUserDefaults.standardUserDefaults
    if @sessionId["token"] == nil
      login = LoginController.alloc.init
      login.delegate = self
      self.presentViewController(login, animated:true, completion:nil)
    end
  end

  def logged_in
    self.dismissViewControllerAnimated true, completion:nil
  end

end

LoginController.rb

class LoginController < UIViewController

  attr_accessor :delegate

  def viewDidLoad
    super
    # show username/pwd
    # show button for login
    # show button for signup
  end

  def press_login_button
    delegate.logged_in
  end

  def press_signup_button
    signup = SignupController.alloc.init
    signup.delegate = self
    self.presentViewController(signup, animated:true, completion:nil)
  end

  def signed_up
    self.dismissViewControllerAnimated true, completion:nil #close signup screen
    delegate.logged_in #close login screen
  end
end

SignupController.rb

class SignupController < UIViewController

  attr_accessor :delegate

  def viewDidLoad
    super
    # show username/pwd
    # show button for close
    # show button for signup
  end

  def press_close_button
    #go back to login controller. how?
    self.dismissViewControllerAnimated true, completion: nil
  end

  def press_signup_button
    delegate.signed_up
  end
end

2 个答案:

答案 0 :(得分:1)

我认为这可以通过在这里稍微分离一些问题来实现 - 特别是注意,注册和登录控制器都假设它们是以模态方式呈现的。相反,让他们让他们的代表处理显示/隐藏。

# from login/signup controller
delegate.should_hide(self)

# from main controller
def should_hide(controller)
  self.dismissViewControllerAnimated(true, completion: nil)
end

这就是你问题的答案

# from signup controller
def should_hide(controller)
  self.dismissViewControllerAnimated(true, completion: -> do
    delegate.should_hide(self)
  end)
end

这将隐藏每个窗口一次,您可能不想要...如果您想同时隐藏两个窗口,请尝试以下操作:

# from signup controller
def should_hide(controller)
  # this will ask the main controller to hide the presented controller...
  # and BOTH controllers will hide at the same time!
  delegate.should_hide(self)
end

答案 1 :(得分:0)

我无法为您提供ruby代码来演示,但您要查找的内容称为退出或退出segue。如果您的目标是IOS 6或更高版本,则可以使用该功能。

在您要退出的控制器上

需要设置一个放松方法。它会在objc中看起来像这样,然后你从你退出的控制器中调用它:

- (IBAction)myExitSegue:(UIStoryboardSegue*)sender {


}

以下是有关此内容的更多信息的链接: http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

你也可以在这里查看这个堆栈溢出问题: Xcode 4.5 Storyboard 'Exit'

希望有所帮助。