7

ViewControllerプロジェクトに2つのビューコントローラーがありますSettingsView。ここで、戻るボタンをViewController'sクリックすると、ラベルを更新しようとしています。正常に動作していますが、ラベルが更新されていません...助けてください...。 SettingsView'sNSLog

SettingsView.m

-(IBAction)backToMain:(id) sender {

  //calling update function from ViewController
    ViewController * vc = [[ViewController alloc]init];
    [vc updateLabel];
    [vc release];

  //close the SettingsView 
    [self dismissModalViewControllerAnimated:YES];
}

ViewController.m

- (void)updateLabel
{
    NSLog(@"Iam inside updateLabel");
   self.myLabel.text = @"test";
}

私のコードの何が問題なのか教えていただけますか?ありがとうございました!

4

4 に答える 4

9

そのためのプロトコルを実装する必要があります。これに従ってください:

1) SettingView.h で、このようなプロトコルを定義します

 @protocol ViewControllerDelegate

 -(void) updateLabel;

  @end

2) .h クラスでプロパティを定義し、.m クラスで合成を定義します。

    @property (nonatomic, retain) id <ViewControllerDelegate> viewControllerDelegate;

3) SettingsView.m 内IBAction

  -(IBAction)backToMain:(id) sender 
 {
     [viewControllerDelegate updateLabel];
 }

4) ViewController.h で、このようなプロトコルを採用します

@interface ViewController<ViewControllerDelegate>

5)viewController.mにこの行を含めますviewDidLoad

settingView.viewControllerDelegate=self
于 2012-04-07T07:24:45.300 に答える
1

updateLabel新しいインスタンスでメソッドを呼び出そうとしているため、ラベルが更新されていません。

updateLabelモーダル ビューを提示した元の viewcontroller のインスタンスを呼び出す必要があります。

デリゲートメカニズムまたは NSNotification を使用して同じことを行うことができます。

デリゲートメカニズムはクリーンです。NSNotification は迅速で汚れています。

于 2012-04-07T07:25:03.303 に答える
0

あなたは正確に正しいを呼んでいませんvc。これは、そのクラスの新しいインスタンスを作成し、updateLabelそのインスタンスの を呼び出すためです。

いくつかのオプションがあります。

  1. それを callBack として実装しdelegate(デリゲート messagePassing、またはデリゲート通知 - ただし、呼び出したい)、そのクラス インスタンスにupdateLabelメソッドを呼び出すように通知します。

  2. 元のインスタンスを現在使用中のクラスへの として使用し、そのインスタンスを使用しVCdependency injectionupdateLabel

  3. NSNotifications / NSUserDefaults を使用して、viewController 間で通信し、アクションの通知システムをセットアップします。これは非常に簡単ですが、長期的にはそれほど優れたものではありません。

オプション 1 (または) オプション 2 をお勧めします。

于 2012-04-07T07:47:34.347 に答える
0

SettingsView クラスで次のように宣言するだけです。

 UILabel *lblInSettings;// and synthesize it

Settings viewController を提示するときに、次のように割り当てます。

settingsVC.lblInSettings=self.myLabel;

次に、 lblInSettings で更新したものは何でも MainView に存在することは明らかです....デリゲートメソッドや更新メソッドは必要ありません。

Means if you assign at the time of dismissing like
lblInSettings.text=@"My new value";
then self.myLabel also will be updated.

ご不明な点がございましたらお知らせください。

于 2012-04-07T08:03:39.187 に答える