0

我对以下情况感到困惑。我有一个视图控制器(VC),它有 1 个子视图(SubV)和 1 个其他类。(classA)我还有一个从 classA 调用的事件处理程序,我希望这个事件处理程序在 VC 中更改我的 subV。

当我直接从 VC 访问 SubV 时,没关系,子视图的图像发生了变化等。但是当 classA 触发 VC 的事件处理程序时,它到达 VC,也访问了 subView 的方法,但我的 subView 没有变化!!!(我也尝试委托,但结果是一样的)

视图控制器.h

@interface ViewController : UIViewController {
.
IBOutlet SubView *subView;
ClassA *classA;
.
}
@property (retain, nonatomic) IBOutlet SubView *subView;
@property (retain, nonatomic) ClassA *classA;

视图控制器.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
}

子视图.h

@interface SubView : UIImageView 

@property int state;
@property NSArray *imageArray;

- (void) RefreshView;
- (id) init;

@end

子视图.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];
}

类A.m

-(void)methodA{
  [myEvent requestEvent];
}

所以,我在这里要做的是使用 Viewcontroller 中的按钮和在另一个 classA 中运行的线程访问和更改 subView

4

2 回答 2

0

编辑:不太清楚该怎么做。您已根据我提出的更改编辑了您的帖子,使我的回答充其量看起来是多余的,而在最坏的情况下却是疯狂的……

您已将 SubView 类创建为 UIImageView 的子类。但是 IBOutlet *subView 不是 SubView 类的成员,而是 UIImageView 的成员。我怀疑这也可能会延续到 xib/storyboard(?)如果是这样,这意味着您发送到 subView 实例的任何消息都将由库存 UIImageView 而不是您自己的类处理...

@property (retain, nonatomic) IBOutlet UIImageView *subView;

应该读

@property (retain, nonatomic) IBOutlet SubView *subView;
于 2013-02-03T19:11:59.413 回答
0

终于我找到了解决方案!由于我在 ClassA 中运行的线程,我应该使用 '

[self performSelectorOnMainThread:@selector(myMethodToRefreshSubView) withObject:nil    waitUntilDone:NO];

在我的 eventListener 方法中。

于 2013-02-04T12:09:00.317 回答