2012-07-12 71 views
1

我有一個類似的問題發佈之前,但我現在有一個更明確的問題和更多的信息以及代碼。我目前有一個ViewController(SignUpViewController)與UITextField和UIButton。我也有另一個ViewController(ProfileViewController),它有一個UINavigationBar。我希望能夠在SignUpViewController的TextField中輸入用戶名,點擊UIButton,然後將ProfileViewController中的naviBar文本設置爲SignUpViewController的TextField中的文本。問題是,我無法從ProfileViewController訪問UITextField。我目前在我的AppDelegate中有一個名爲「titleString」的NSString,並試圖用它作爲某種解決方案。這是我下面的代碼,如果我的問題已經徹底甩你了,因爲這是有點難以解釋了堆棧溢出:從不同的ViewController更改導航欄文本

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。這裏發生了什麼?

回答

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)didSignInWith標題:(* NSString的)稱號;方法。

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

對於你問我推薦的第一個。祝你好運!