0

私はこれに対する答えを無駄に探し回ったので、答えられた質問をしていないことを願っています.

2 つのクラス (ClassA と ClassB) があり、どちらもセグエ経由でリンクされている UIViewControllers に接続されています。ClassA には、backgroundImage という名前の UIImage が含まれています。私の目標は、ClassA の背景画像を ClassB 内から変更することです。

ClassB.h で試しました:

@property (nonatomic, retain) ClassA *mainView;

そして ClassB.m で、次の方法で背景画像を変更しようとしました:

@synthesize mainView;
//Then inside button click I tried:
[mainView.backgroundImage setImage:[UIImage imageNamed:@"newImage.jpg"]];

アプリで使用されているのと同じ ClassA に画像を設定していないため、明らかにこれは機能しませんでした。私は明らかな何かが欠けていることを知っています、事前に感謝します!

4

5 に答える 5

1

要件を満たすためにプロトコルメカニズムを使用してください

実装は以下の通り

プロジェクトのAppDelegate.hファイル

@protocol ImageChangeDelegate <NSObject>
@optional
    -(void)ChangeImage;
@end


@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
}
@property (nonatomic,strong) id<ImageChangeDelegate> delegateImageChange;

プロジェクトのAppDelegate.mファイル

@synthesize delegateImageChange;

クラス B の .h ファイル

#import "AppDelegate.h"

@interface EventGuestListViewController : UIViewController
{
   AppDelegate* appDelegate;
}
-(void)ChangeBackgroundOfClassA;

現在、クラス B の .m ファイルに

- (void)viewDidLoad
{
    [super viewDidLoad];
    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

今、BGを変更する方法で

 -(void)ChangeBackgroundOfClassA
 {
     [appDelegate.delegateImageChange ChangeImage];
 }

クラス A にプロトコルを実装して、背景を変更するようになりました。

クラスAの.hファイルに

 #import "AppDelegate.h"

 @interface EventGuestListViewController : UIViewController <ImageChangeDelegate>
 {
    IBOutlet UIImageView* imageBGClassA;
    AppDelegate* appDelegate;
 }

クラスAの.mファイルに

- (void)viewDidLoad
{
    [super viewDidLoad];
    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.delegateImageChange = self; //Here you need to set the delegate to 'self' to call then Custom Protocol method
}

-(void)ChangeImage
{
     imageBGClassA.image = [UIImage imageNamed:@"newImage.jpg"];
}

-(void)ChangeBackgroundOfClassAクラス Bでは、クラス A に実装されているデリゲート メソッド呼び出しを一度呼び出すと、背景画像が確実に変更されます

これは私と一緒に仕事です

それはあなたを助けるかもしれません!!!

于 2013-04-19T06:25:33.707 に答える
0

このタスクは、カスタム デリゲートまたは通知を使用して簡単に実行できます。Notification を使用して説明します。クラスAとクラスBの2つのクラスがあるとします

Class-A で、このような通知を追加します

 [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeImage)
                                             name:@"ImageChangeNotification"
                                           object:nil];

クラスAにもセレクターを作成します

 -(void)changeImage
   {
       [yourImageView setImage:[UIImage imageNamed:@"YouImageName.png"]];
   }

あとは、この通知をプロジェクト全体のどこからでも投稿するだけです。私たちの場合、それをクラスBにしましょう

  [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageChangeNotification" object:nil];
于 2013-04-19T06:32:09.050 に答える
0

次の 2 つの方法のいずれかを試すことができます。1) 委任を使用する。ClassB の読み込み中にデリゲートを渡す。2) NotificationCenter を使用し、クラス B からの通知を呼び出して mainView 画像を変更します。

ハリー。

于 2013-04-19T06:24:26.143 に答える
0

に移動するには、ClassA の同じ「mainView」インスタンスを使用しますClassA View Controller

于 2013-04-19T05:44:04.817 に答える