gpt4 book ai didi

ios - 模态视图在解雇后重新出现

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:09:01 25 4
gpt4 key购买 nike

我在 Root View Controller 中的 view did load 方法中以模态方式调用登录 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com