ios - 模态视图在关闭后重新出现

标签 ios modal-dialog

我在 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/

相关文章:

ios - 如何在堆栈 View 中设置纵横比?

ios - 来自 com.apple.xpc.activity.com.apple.cloudkit.scheduler.com.apple.coredata.cloudkit.activity.export 的 EXC_BAD_INSTRUCTION

ios - Restkit:重试失败的请求

iphone - 检查照片库的授权状态

javascript - 空 "<div class="模态背景淡入“></div>”

javascript - 动态更改ckeditor对话框

javascript - Jquery UI 模态对话框

c# - 如何使用模态窗口将 WM_INPUTLANGCHANGEREQUEST 发送到应用程序?

ios - 你如何在 Swift 4 中创建文本字段填充?

ios - 这个花哨的 iOS 登录对话框是标准组件吗?