1

これより前に同様の質問を投稿しましたが、コードとともに、より明確な質問とより多くの情報があります。現在、UITextFieldとUIButtonを備えたViewController(SignUpViewController)があります。UINavigationBarを持つ別のViewController(ProfileViewController)もあります。SignUpViewControllerのTextFieldにユーザー名を入力し、UIButtonをタップしてから、ProfileViewControllerのnaviBarテキストをSignUpViewControllerのTextFieldのテキストに設定できるようにします。問題は、ProfileViewControllerからUITextFieldにアクセスできないことです。現在、AppDelegateに「titleString」というNSStringがあり、それをある種のソリューションとして使用しようとしています。私の質問があなたを完全に失望させた場合、以下の私のコードは次のとおりです。

SignUpViewController:

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

ProfileViewController:

- (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 に答える