0

2 つのビューコントローラーを備えたアプリがあり、VC1 の UILabel からのテキストを VC2 内の UITextView に表示したいと考えています。

VC2 の viewDidLoad で VC1 から UILabel にアクセスできましたが、実際のテキストは表示されません。

VC2 で VC1 オブジェクトを作成し、VC1 にアクセスできます。VC2 viewDidLoad は次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.textView.text = vc1Controller.label.text;
}

しかし、アプリを実行して VC2 が表示されると、UITextView には何も表示されません。私はそれを有線にしており、NSLog(@”Yes”); を実行することでテキストを表示できます。たとえば、上記の方法で。

NSLog(@”%@”, vc1Controller.label.text); を実行すると、出力に NULL が表示されます。

カスタムゲッターを作成する必要がありますか? アドバイスをいただければ幸いです。私はすべてのプログラミングに比較的慣れていません。

4

3 に答える 3

1

ビューから NSString を渡す方法は次のとおりです。

最初のビュー:

@interface ViewController : UIViewController{
IBOutlet UILabel *firstLbl;
NSString *firstString;
}

-(IBAction)labelTouched:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

firstString = @"I'm the first labels text";
firstLbl.text = firstString;

}


-(IBAction)labelTouched:(id)sender{

ViewController2 *view2 = [[ViewController2 alloc] init];
view2.selectedFirstLabelString = firstString;
[self presentModalViewController:view2 animated:YES];
[view2 release];
}

セカンド ビュー:

@interface ViewController2 : UIViewController{
IBOutlet UILabel *secondLbl;
}
@property (nonatomic, retain)NSString *selectedFirstLabelString;

-(IBAction)done:(id)sender;
@end



@implementation ViewController2
@synthesize selectedFirstLabelString;


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

secondLbl.text = selectedFirstLabelString;
}

お役に立てれば。

于 2012-07-22T00:21:20.167 に答える
1

VC2 で VC1 オブジェクトを作成する場合、VC2 をプッシュした VC1 を参照していないことは明らかです。

あなたの vc2 は新しく作成された vc1 からラベル値を読み取ろうとしていますが、実際には VC2 をプッシュした VC1 から値を読み取ろうとしています。

コードを機能させるには、いくつかの方法があります。

1) parentViewController へのアクセス (vc2 をモーダルとして提示している場合)

VC2 では、親コントローラーを参照できます。

VC1* vc = (VC1 *)self.parentViewController; VC2.textView.text = vc.label.text;

2) ナビゲーション コントローラー スタックから vc1 にアクセスする: UINavigationController でスタックにアクセスする方法この投稿にはすべてが含まれています。

3) デリゲート パターンを使用します。 カスタム デリゲートこれにはすべてが含まれています。

これが役に立つことを願っています。

于 2012-07-22T02:50:12.190 に答える
1

行で:

self.textView.text = [vc1Controller self.label.text];

selfキーワード inを使用していますが[vc1Controller self.label.text]、現在のビュー コントローラー (ビュー コントローラー 2) に存在しない UILabel を参照します。vc1Controller のラベルをプロパティにして、次を使用します。

vc1Controller.label.text;

そのテキスト値にアクセスします。

于 2012-07-21T19:04:46.617 に答える