2012-01-24 120 views
0

控制的UIImageView子视图我有两个类:MainViewController和PlayerImageController(NSObject的)添加并从另一个类

我将如何能够从PlayerImageController我的UIImageView的子视图添加到我的MainViewController和规定操作,如

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.view addSubview:[PlayerImageController addPlayerImage]]; 
} 

- (void)somethingHappened 
{ 
    [PlayerImageController changePlayerImage]; 
} 

,并有我在我的PlayerImageController类的方法,如

+ (UIImageView *) addPlayerImage 
{ 
    heroPlayerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hero-still.png"]]; 
    [heroPlayerImageView setFrame:CGRectMake(151, 200, 17, 23)]; 
    return heroPlayerImageView; 
} 

+ (void) changePlayerImage 
{ 
    //change image 
} 

谢谢!

回答

1

我认为你的情况你应该使用委托模式。 声明:本

@protocol PlayerImageUpdater 
    - createPlayerImage; 
    - changePlayerImage; 
@end 

然后加:

@interface PlayerImageController <PlayerImageUpdater> 

然后添加到MainViewController伊娃和财产,如:

@property (...) id<PlayerImageUpdater> playerDelegate; 

集此委托,如:mainViewController.playerDelegate = playerImageControllerInstance;

,并在代码中使用:

[playerDelegate createPlayerImage]; 
[playerDelegate changePlayerImage]; 
1

一方面,我不会推荐使用类方法,但实例方法。这样,您可以根据需要实现尽可能多的类实例,并保留对实例的引用来更新它们。

在另一方面,如果UIImageView是你们班的重要因素,我建议你实现它作为一个UIView子类(如果不是的话,你可以做到这一点作为一个NSObject子类为好,并得到其的UIImageView属性)。

看一看下面的代码:

PlayerImageController.h:

@interface PlayerImageController : UIView{ 
    UIImageView *_heroPlayerImageView; 
} 

-(void) changePlayerImage; 

PlayerImageController.m:

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     _heroPlayerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hero-still.png"]]; 
     // x = 0 and y = 0 because its relative to its parent view, the object itself. 
     [_heroPlayerImageView setFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 
     [self addSubview:_heroPlayerImageView]; 
    } 
    return self; 
} 

MainViewController.h:

#import "PlayerImageController.h" 

@interface MainViewController : UIViewController{ 
    PlayerImageController *_player; 
} 

的MainView Controller.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    _player = [[PlayerImageController alloc] initWithFrame:CGRect(151, 200, 17, 23)]; 
    [self.view addSubview:_player]; 
} 

- (void)somethingHappened 
{ 
    [_player changePlayerImage]; 
} 

我希望它可以帮助你(我没有真正尝试过上面的代码,它可能有一些语法错误)。

如果您不使用ARC,请记住保留并释放您的变量!祝你好运!

相关问题