2012-07-09 48 views
1

好吧,我會盡可能簡單地做到這一點(當我試着問這個問題時,我似乎在chat.stackoveflow.com上運行)。我想將文本從一個viewcontroller中的文本傳遞給另一個viewcontroller。在視圖控制器之間傳遞數據 - iOS Xcode - 什麼是好方法?

我應該使用模型類,並將textfield.text存儲在Model。[h/m]文件中,然後讓第二個視圖控制器訪問存儲在模型中的數據?

基本上這就是我,

ViewControllerWelcome.h

@interface ViewControllerWelcome : UIViewController { } 

@property (weak, nonatomic) IBOutlet UITextField *textFieldUsername; 

ViewControllerWelcome.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
       ViewControllerHome *home = (ViewControllerHome *)[storyboard instantiateViewControllerWithIdentifier:@"Home"]; 
       NSString *username = _textFieldUsername.text; 
       home.lblUSERNAME.text=username; 
       [self presentModalViewController:home animated:YES]; 

ViewControllerHome.h

@interface ViewControllerHome : UIViewController { 
NSString *username; 
UILabel *lblUSERNAME; 
} 

@property (weak, nonatomic) IBOutlet UILabel *lblUSERNAME; 

ViewControllerHome.m

- (void)changeUSERNAME { 

// get username from welcome tf 
ViewControllerWelcome *welcome = [[ViewControllerWelcome alloc] init]; 
welcome.username = [self lblUSERNAME.text]; 
// _lblUSERNAME.text = welcome._textFieldUsername.text; 
//welcome.textFieldUsername.text = _username; 
// username = welcome.textFieldUsername.text; 
NSLog(@"username = %@",username); 
// welcome.textFieldUsername.text = _lblUSERNAME.text; 
// NSLog(@"username = %@",welcome.textFieldUsername.text); 
}  

正如你可以看到我嘗試了幾種不同的東西,但不能拿出一個可行的解決方案:-l

+2

如果您使用故事板,爲什麼不使用segues? – tomidelucca 2012-07-09 09:41:58

+0

@ tomi2711你能否詳細說明一下? – Chris 2012-07-09 09:47:10

回答

0

我精製這個問題與另一個問題上,從而可以發現here基本上,我創建一個單獨的視圖控制器之間傳遞數據。到目前爲止,我沒有遇到任何問題(敲木頭)。

0

你不應該繼續這兩個ViewController在兩個方向上的強引用。例如,你可以做的是在你的ViewControllerWelcome中用一個委託在其中聲明一個協議。你可以讓ViewControllerHome instanciate另一個控制器,然後成爲它的代表,只要用戶輸入用戶名就會得到通知。

@protocol ViewControllerWelcomeDelegate <NSObject>  
- (void) userNameEntered:(NSString *)userName;  
@end 

@interface ViewControllerWelcome : UIViewController 
@property (nonatomic, weak) id <ViewControllerWelcomeDelegate> delegate; 
... 
@end 

在你的@implementation:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 
{ 
    [theTextField resignFirstResponder]; 
    [delegate userNameEntered:theTextField.text]; 

    return YES; 
} 
+0

(o.O)代碼會很好。 – Chris 2012-07-09 09:48:11

6

由於您正在使用Storyboard,因此使用Segues在您的ViewControllers之間執行轉換更有意義。如果你不熟悉塞格斯,你可以看看這裏:

http://developer.apple.com/library/IOs/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomSegues/CreatingCustomSegues.html

這是非常簡單的創建一個IB賽格瑞。完成設置後,請執行
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender並配置您的目標視圖控制器。所以你會有類似以下的東西。

-(void)prepareForSegue(UIStoryboardSegue *)segue sender:(id)sender{ 
    // Assume you have a viewHomeSegue defined that has the name of the segue you want to perform 
    NSString * segueIdentifier = [segue identifier]; 
    if([segueIdentifier isEqualToString:viewHomeSegue]){ 
     ViewControllerHome * homeController = (ViewControllerHome *)[segue destinationViewController]; 
     homeController.lblUSERNAME.text = _textFieldUsername.text; 
    } 
} 
+0

謝謝@carl_h。好的提示.. – 2015-08-13 14:14:44

相關問題