0

我四处寻找答案但无济于事,所以我希望我不是在问一个已回答的问题。

我有两个类(ClassA 和 ClassB),它们都连接到通过 segue 链接的 UIViewController。ClassA 包含一个名为 backgroundImage 的 UIImage。我的目标是从 ClassB 中更改 ClassA 的背景图像。

在 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"];
}

在 B 类中,一旦-(void)ChangeBackgroundOfClassA调用在 A 类上实现的委托方法调用,背景图像就会发生变化

这是和我一起工作

可能对你有帮助!!!

于 2013-04-19T06:25:33.707 回答
0

您可以使用自定义委托或通知轻松完成此任务。我将使用 Notification 向您解释。假设有两个类 - A 类和 B 类

在 A 类中添加这样的通知

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

还在 Class-A 中创建选择器

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

剩下的就是从整个项目中的任何地方发布此通知。在我们的例子中,让它成为 B 类

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

您可以尝试以下两种方法中的任何一种:1)使用委托。在加载 ClassB 时传递委托。2) 使用 NotificationCenter 并通过调用 B 类的通知来更改主视图图像。

哈利。

于 2013-04-19T06:24:26.143 回答
0

应该尝试委托机制。它将允许您从 classB 调用 classA 中的方法。在该方法中,将 classA 的背景图像从 classB 的调用更改为委托

于 2013-04-19T05:45:21.477 回答
0

使用 ClassA 的相同“mainView”实例导航到ClassA View Controller.

于 2013-04-19T05:44:04.817 回答