0

私は、1 つのビューコントローラーの 2 つの UITextfields から別のビューコントローラーにデータを渡そうとすることに少し固執しています。主に以下のアイテムを入手しました。

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

    IBOutlet UITextfield *Textfield1;
    IBOutlet UITextfield *Textfield2;
}

-(IBAction)GoNextView:(id)sender;

@end

ViewController.m

@interface ViewController ()

@end

@implementation ViewController

(IBAction)GoNextView:(id)sender {

    SecondView *second = [[SecondView alloc] initWithNibName:nil bundle:nil];

    [self presentViewController:second animated:YES completion:NULL];  
}

- (void)viewDidLoad {
     [super viewDidLoad];
}

SecondView.h

#import <UIKit/UIKit.h>

@interface SecondView : UIViewController {

    IBOutlet UILabel *ShowTextfield1;
    IBOutlet UILabel *ShowTextfield2;
}

-(IBAction)GoBack:(id)sender;

@end

SecondView.m

@interface SecondView ()

@end

@implementation SecondView

- (IBAction)GoBack:(id)sender {

    [self dismissViewControllerAnimated:YES completion:NULL];
}

私が欲しいのは、ボタンGoNextViewが押されたときに のデータを に渡すことUITextfieldですSecondView。そして次のページへ。上の 2 つのラベルにデータが表示されますSecondView。私はこれに何時間も苦労してきましたが、それが私を殺しています。私はいくつかのNSStringとを使用しなければならないことを知っています@property(nonatomic, retain) NSString *asdas。しかし、私は単にそれを機能させることはできません。上記のコードに基づいてUITextfield、次のビューで 2 つのラベルから 2 つのラベルにデータを渡すにはどうすればよいでしょうか?

4

2 に答える 2

0

NSUserDefaults または通常の合成共通インターフェイス変数を使用します。例えば、

  1. NSUserDefaults 送信者のView Controllerから、

    NSString *text=textField1.text; NSUserDefaults *prefs=[NSUserDefaults standardUserDefaults]; [prefs setObject:text forKey:@"text1value"];

そして、次のように、任意のビュー コントローラーから値を取得できます。

NSUserDefaults *prefs=[NSUserDefaults standardUserDefaults];
NSString *received string= [prefs stringForKey:@"text1value"];
  1. 通常の割り当て担当者、

ビューコントローラーをナビゲートするために performegue を使用しているに違いないと思います。「prepareforsegue」と呼ばれるデリゲート メソッドがあり、テキスト フィールドの値をインターフェイス変数に割り当てることができます。例えば、

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"seguename"]) {
        destViewController *destViewController = segue.destinationViewController;
        destViewController.name = @"some text";
    }
}

受信側のView Controllerでは、ゲッター変数は実際には次のように定義されています。

.h ファイルでは、@property(nonatomic, strong) NSString *name;

.m ファイルでは、実装後に変数を合成することを忘れないでください

@implementation destViewController
@synthesize name;

それが役に立てば幸い!

于 2016-01-23T12:12:10.763 に答える
0

関数を使用して 2 番目のビューに移動する代わりに、ストーリーボード セグエを使用します。ストーリーボード アプリケーションを作成します。セグエを作成するには、ナビゲーション ビュー コントローラーが必要です。次の手順でそれを行うことができます。

  1. 最初のビュー コントローラーを選択し、[エディター] -> [埋め込み] -> [ナビゲーション コントローラー] に移動します。
  2. 次に、[GoNextView] ボタンを Ctrl キーを押しながらクリックし、SecondView にドラッグ アンド ドロップします。
  3. プッシュ、モデル、カスタムの 3 つのオプションがあります。プッシュをクリックすると、これら 2 つのビューの間にセグエが作成されます。
  4. そのセグエをクリックし、右側のプロパティ ウィンドウで [属性インスペクターを表示] をクリックします。ここで、「コネクタ」または好みの名前を付けます。

次に、SecondView.h で 2 つの文字列を作成します。

@property (nonatomic, retain) NSString *str1;
@property (nonatomic, retain) NSString *str2;

それらを SecondView.m で合成します。

UITextFields に、ViewController にある「text1」と「text2」という名前を付けましょう。ViewController.h に移動して追加します#import "SecondView.h"

ViewController.m で次の操作を行います。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"connector"])
    {
        ViewController *VC = [segue destinationViewController];

        VC.str1 = text1.text;
        VC.str2 = text2.text;
    }
}

これらの文字列を SecondView に表示できるようになりました。Secondview.m では、

label.text = str1;

と表示されます。

于 2013-01-02T23:39:35.407 に答える