1

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

注册视图控制器:

- (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];
 }

配置文件视图控制器:

- (void)viewDidLoad {

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

     [super viewDidLoad];
}

在我点击 SignUpViewController 中的 submitButton 之前,一切正常。这里发生了什么?

4

1 回答 1

1

您可以在这里做几件事来在视图控制器之间传递数据。

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

在 signInViewController.h 中:

@protocol SignInDelegate

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

@end

@interface SignInViewController : UIViewController

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

然后,您的 ProfileViewController 在分配时将被设置为委托:

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];

对于你的要求,我推荐第一个。祝你好运!

于 2012-10-13T16:01:08.547 回答