1

異なるからコードを実行する方法がわかりませんView Controller

私は新しいプロジェクトを作成しました。宿題として迅速に対応していただければ幸いです。今夜までに完了する必要があります。

私のプロジェクトでは、2つView Controllerの名前が付けられています。viewcontroller1およびviewcontroller2、およびそれらを2つの異なるカスタムクラスに割り当てました。

Viewcontroller1画面に表示されるのは2つUIButtonsあり、1つはコードを実行するためのもので、もう1つはにプッシュするためのものviewcontroller2です。

ユーザーが最初UIButtonにクリックしたときに、そのボタンで以下のコードを実行し、結果をに表示しUILabelますviewcontroller2

このコードは、を使用して乱数を作成しarc4random、のランダムな単語を表示しUILabelます。このコードはシングルページベースのアプリで機能し、実装時に使用されます。

つまり、基本的に私が欲しいのは、最初をクリックしたときに、UIButtonランダムに作成された単語をに表示したいということUILabelですviewcontroller2

-(IBAction)button; {
    int random_num;
    random_num = (arc4random() % 5 - 1) + 1;
    if (random_num == 1) { 
    label.text = @"hello1";    
    } 
    else if (random_num == 2) {
    label.text = @"hello2";
    }
    else if (random_num == 3) {
    label.text = @"hello3";
    }
    else if (random_num == 4) {
    label.text = @"hello4";
    }
}

は私のtimelabelです。UILabelviewcontroller2

あなたの答えに詳細を教えてください。私は初心者なので、すぐに概念を理解できないかもしれません。

ユーザーがアプリを開きます

Viewcontroller1が表示されます

ユーザーは、のbutton 1コードを実行するを押します。labelviewcontroller2

ユーザーがに移動するには、button 2を押しますviewcontroller

Viewcontroller2が表示され、ボタンによってラベルが変更されました

難しいことではないことは知っていますが、できません。

以前に私に答えてくれた人たち、そして答えてくれる人たちのために本当にありがとう。

ありがとう。

4

2 に答える 2

1

プロトコルを使用できます

1)このようにviewcontroller1.hでプロトコルを作成します

@protocol ViewController1Delegate <NSObject>

- (void)dealWithButton1;

@end

2)viewcontroller1.hにdelegate.inを追加しました

@interface viewcontroller1 : XXXXX
{
    id<ViewController1Delegate> delegate;
}
@property(nonatomic,assign) id<ViewController1Delegate> delegate;

@end

3)viewcontroller1.mに合成を追加

@synthesize delegate;

4)ボタン送信者に対処する

-(IBAction)button
{
    [delegate dealWithButton1];
}

5)viewcontroller2.hを処理します

@interface viewcontroller2 : XXXXX<ViewController1Delegate>
{
    viewcontroller1 *vc1 ;
}

6)viewcontroller2.mでデリゲートをバインドする

vc1.delegate = self;

7)viewcontroller2.mでデリゲートを達成する

- (void)dealWithButton1
{
int random_num;
random_num = (arc4random() % 5 - 1) + 1;
if (random_num == 1)
{ 
    label.text = @"hello1";    
}
else if (random_num == 2)
    label.text = @"hello2";
else if (random_num == 3)
    label.text = @"hello3";
else if (random_num == 4)
    label.text = @"hello4";
}
于 2012-07-23T23:24:36.910 に答える
0

ですから、まずはっきりさせておきたいのですが、viewcontroller1が画面に表示されることはあり得ません。実際にviewcontroller1のビューが画面に表示されます。画面にはビューのみが表示され、それらはビューコントローラによって属し/制御されます。

あなたの質問に正しく答えるために、私たちは知る必要があります、あなたはビューを変えるために何を使いますか?ナビゲーションコントローラー、タブバーコントローラーなどを使用していますか?

通常、テキストを表示するためのUI要素であるラベルは、viewcontrollerのviewDidLoadメソッドで初期化されます。したがって、その前にテキストを設定しても何も起こりません。

viewcontroller1からviewcontroller2への参照がある場合は、テキストを保持するプロパティを作成し、ボタンを押した後に設定できます。また、viewcontroller2は、ラベルにビューをロードした後にテキストを表示できます。したがって、viewcontroller1のコードは次のようになります

-(IBAction)button; {
 ViewController2 *viewController2 = [[ViewController2 alloc] init];
 viewcontroller2.textToShow = ......;
 //show view of your viewcontroller2
 // e.g.
 [self.navigationController pushViewController:viewcontroller2 animated:YES];
 }

そして、viewcontroller2ヘッダーファイル(ViewController2.h)

   @property (nonatomic, strong) NSString *testToShow;

viewController2実装ファイル(Viewcontroller2.m)

@synthesize textToShow;
-(void)viewDidLoad
 {
     UILabel *label = UILabel aloc initWithFrame:CGRectMake(0, 0, 200, 200);
     [self.view addSubview:label];
     label.text = self.textToShow;
 }
于 2012-07-23T23:38:02.710 に答える