我在 Root View Controller 中的 View 确实加载方法中以模态方式调用登录 View ,但是当我关闭模态视图 Controller 时它就会重新出现!有什么建议么? 听到代码:
** .h **
//
// FirstViewController.h
// Voyager
//
// Created by Peter Unger on 9/1/13.
// Copyright (c) 2013 Penumbra Software. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Parse/Parse.h>
@interface FirstViewController : UIViewController
@end
@interface DefaultSettingsViewController :
UIViewController <PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate>
@end
** .m **
//
// FirstViewController.m
// Voyager
//
// Created by Peter Unger on 9/1/13.
// Copyright (c) 2013 Penumbra Software. All rights reserved.
//
#import "FirstViewController.h"
#import <Parse/Parse.h>
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PFLogInViewController *login = [[PFLogInViewController alloc] init];
login.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton;
login.delegate = (id)self;
login.signUpController.delegate = (id)self;
[self presentViewController:login animated:YES completion:nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)signUpViewController:(PFSignUpViewController *)signUpController didSignUpUser:(PFUser *)user {
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
最佳答案
正如@Bergasms 已经说过的,你有一个循环。 viewDidAppear
每当你的 viewController 出现在屏幕上时,方法就会被调用。因此,当您退出所呈现的 viewController 时,第一个 View Controller 应该出现,然后调用 viewDidAppear
,这将再次呈现 PFLogInViewController
,创建一个循环。
如果将代码移至viewDidLoad
方法,您的模态将仅被调用一次,因为仅当分配 viewController 时才会调用此方法。
如果你想让用户看不到第一个viewController,你可能需要在presentViewController:animated:completion:
中设置动画至NO
.
编辑:
有人在另一个问题中说,如果你在 viewDidLoad 中调用另一个 View Controller ,你可能会收到错误(虽然我已经这样做过一次,但还没有检查错误的行为)。如果这是您的情况并且出现错误,则必须将代码放在 viewDidAppear
中。 .
如果不知何故你仍然想使用 viewDidAppear
,您可以简单地创建一个 BOOL
控制是否 PFLogInViewController
的属性是否已被调用。会是这样的
@property(nonatomic, assign) BOOL isLogged;
还有
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (!self.isLogged)
{
self.isLogged = YES;
PFLogInViewController *login = [[PFLogInViewController alloc] init];
login.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsLogInButton | PFLogInFieldsSignUpButton;
login.delegate = (id)self;
login.signUpController.delegate = (id)self;
[self presentViewController:login animated:YES completion:nil];
}
}
这样,你的PFLogInViewController
将被调用一次。
关于ios - 模态视图在关闭后重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18564482/