我对以下情况感到困惑。 我有一个viewcontroller(VC),它有1个子视图(SubV)和1个其他类。(classA) 此外,我有一个从classA调用的事件处理程序,我希望此事件处理程序在VC中更改我的subV。
当我直接从VC访问SubV时,可以,子视图的图像改变等。 但是当classA触发VC的事件处理程序时,它会到达VC,也可以访问subView的方法,但是我的子视图没有变化! (我也尝试代理,但结果是一样的)
ViewController.h
@interface ViewController : UIViewController {
.
IBOutlet SubView *subView;
ClassA *classA;
.
}
@property (retain, nonatomic) IBOutlet SubView *subView;
@property (retain, nonatomic) ClassA *classA;
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.subView = [self.subView init];
self.classA = [[ClassA alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventListener:) name:@"eventType" object:nil];
}
- (void) eventListener:(NSNotification *) not
{
[self.subView RefreshView]; // it doesnt work! calls refreshView method but no change
}
- (IBAction)buttonPressed:(id)sender
{
[self.subView RefreshView]; // it works perfect
}
SubView.h
@interface SubView : UIImageView
@property int state;
@property NSArray *imageArray;
- (void) RefreshView;
- (id) init;
@end
SubView.m
- (void) RefreshView{
[self stopAnimating];
self.imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"a.png"], nil];
self.animationDuration = 1;
self.animationImages = self.imageArray;
self.animationRepeatCount = 0;
[self startAnimating];
}
ClassA.m
-(void)methodA{
[myEvent requestEvent];
}
所以,我在这里要做的是访问&使用Viewcontroller中的按钮更改subView,并在另一个classA中运行一个线程
答案 0 :(得分:0)
编辑:不太确定该怎么做。你已经根据我提出的修改编辑了你的帖子,让我的答案看起来多余,最糟糕的是......
您已将类SubView创建为UIImageView的子类。但是IBOutlet * subView不是SubView类的成员,而是UIImageView的成员。我怀疑这可能会延续到xib / storyboard(?)如果是这样,这意味着你发送给你的subView实例的任何消息都将由一个股票UIImageView而不是你自己的类来处理......
@property (retain, nonatomic) IBOutlet UIImageView *subView;
应该阅读
@property (retain, nonatomic) IBOutlet SubView *subView;
答案 1 :(得分:0)
最后我找到了解决方案!由于我在ClassA中运行的线程,我应该使用'
[self performSelectorOnMainThread:@selector(myMethodToRefreshSubView) withObject:nil waitUntilDone:NO];
在我的eventListener方法中。