我试图获得类似于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
答案 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'
希望有所帮助。