gpt4 book ai didi

ios - 从不同的 ViewController 更改 NavigationBar 文本

转载 作者:行者123 更新时间:2023-11-29 13:32:47 25 4
gpt4 key购买 nike

我在这个问题之前发布了一个类似的问题,但我现在有一个更明确的问题和更多信息以及代码。我目前有一个带有 UITextField 和 UIButton 的 ViewController (SignUpViewController)。我还有另一个具有 UINavigationBar 的 ViewController (ProfileViewController)。我希望能够在 SignUpViewController 的 TextField 中键入用户名,点击 UIButton,然后将 ProfileViewController 中的导航栏文本设置为 SignUpViewController 的 TextField 中的文本。问题是,我无法从 ProfileViewController 访问 UITextField。我目前在我的 AppDelegate 中有一个名为“titleString”的 NSString,我正在尝试将其用作某种解决方案。如果我的问题完全让您失望,下面是我的代码,因为这有点难以解释堆栈溢出:

注册 View Controller :

- (IBAction)submitButton {

ProfileViewController *profileVC = [[ProfileViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:profileVC animated:YES completion:nil];

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.titleString = @"Profile";

appDelegate.titleString = usernameTextField.text;

}

- (void)viewDidLoad {

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

[super viewDidLoad];
}

配置文件 View Controller :

- (void)viewDidLoad {

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.title = appDelegate.titleString;

[super viewDidLoad];
}

一切正常,直到我点击 SignUpViewController 中的提交按钮。这是怎么回事?

最佳答案

您可以在这里做几件事来在 View Controller 之间传递数据。

1) 设置委托(delegate)方法。 profileViewController 将是 signInViewController 的委托(delegate)。当按下登录按钮时,signInViewController 调用 profileViewController 正在监听的委托(delegate)方法,该方法将标题传递给 profileViewController。

在 signInViewController.h 中:

@protocol SignInDelegate

@required
- (void)didSignInWithTitle:(NSString*)title;

@end

@interface SignInViewController : UIViewController

@property (nonatomic, assign) id<SignInDelegate> delegate;

然后您的 ProfileViewController 将在您分配它时设置为委托(delegate):

signInViewController.delegate = profileViewController

这是您的 ProfileViewController.h:

#import "SignInViewController.h"

@interface ProfileViewController : UIViewController <SignInDelegate>

最后,确保您的 ProfileViewController 实现了 - (void)didSignInWithTitle:(NSString*)title;方法。

2) 您可以使用 NSNotificationCenter 发布带有标题的自定义通知。如果您有多个其他 viewController 想要像配置文件一样设置标题,这将很有用。

#define UPDATE_NAVBAR_TITLE @"UPDATE_NAVBAR_TITLE"

当 signInViewController 完成时:

[[NSNotificationCenter defaultCenter] postNotificationName:UPDATE_NAVBER_TITLE object:nil];

然后,确保将 ProfileViewController 添加为观察者:

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(navbarUpdated) name:UPDATE_NAVBAR_TITLE object:nil];

对于您的问题,我推荐第一个。祝你好运!

关于ios - 从不同的 ViewController 更改 NavigationBar 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443934/

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