1

了解しました。これをできるだけ簡単にするようにします(この質問をしようとしたときに、chat.stackoveflow.comで実行されたようです)。あるビューコントローラのテキストフィールドから別のビューコントローラにテキストを渡したい。

Modelクラスを使用してtextfield.textをModel。[h/m]ファイルに保存してから、2番目のViewControllerにモデルに保存されているデータにアクセスさせる必要がありますか?

基本的にこれは私が持っているものです、

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

4

4 に答える 4

6

ストーリーボードを使用しているため、セグエを使用して ViewController 間の遷移を実行する方が理にかなっています。セグエに慣れていない場合は、こちらをご覧ください。

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;
    }
}
于 2012-07-09T10:05:31.620 に答える
0

これらの2つのViewController間の強い参照を両方向に保持するべきではありません。たとえば、できることは、ViewControllerWelcomeデリゲートを含むプロトコルを宣言することです。ViewControllerHome他のコントローラーをインスタンス化して、ユーザーがユーザー名の入力を完了するとすぐに通知を受けるその代理人になることができます。

@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;
}
于 2012-07-09T09:43:49.550 に答える
0

ここで見つけることができるSOに関する別の質問でこの質問を洗練しました 基本的に、ビューコントローラー間でデータを渡すシングルトンを作成しました。これまでのところ、問題はありませんでした(木をたたく)。

于 2012-07-19T08:21:01.197 に答える
0

.storyboard ファイルがある場合は、インターフェイス ビルダーのようにそこにビューをレイアウトできます。

このドキュメントは、初めて私を本当に助けてくれました:

パート 1: http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

パート 2: http://www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2

セグエ部分だけを読みたい場合は、パート 2 だけを読むことをお勧めします。

于 2012-07-09T09:55:44.843 に答える