我有两个A和B类。
A类包含一个名为myView的UIView,还有一个MyMethod方法来设置myView的位置。
-(void)MyMethod:(NSString *)justCheck
{
[self.view addSubview:myView];
[self.view bringSubviewToFront:myView];
CGRect mframe = [myView frame];
NSLog(@"------------> MyMethod Called = %@",justCheck);
// EDIT: the following NSLogs are added later--------------------
NSLog(@"------------> MyMethod Called:mframe:x = %g",mframe.origin.x); //0
NSLog(@"------------> MyMethod Called:mframe:y = %g",mframe.origin.y); //42
NSLog(@"------------> MyMethod Called:mframe:H = %g",mframe.size.height); //317
NSLog(@"------------> MyMethod Called:mframe:W = %g",mframe.size.width); //320
//---------------------------------------------------------------
mframe.origin.y = 42;
[myView setFrame:mframe];
}
当名为buttonOfA的A类按钮调用此MyMethod时,它完美运行,我可以在位置42看到myView。 代码如下,
-(IBAction)buttonOfA:(id)sender
{
[self MyMethod:@"I am A"];
}
但是,当名为buttonOfB的B类按钮尝试调用此方法时,NSLog可以工作,但我无法在位置42看到myView。代码如下,
-(IBAction)buttonOfB:(id)sender
{
[objOfA MyMethod:@"I am B"]; //objOfA is the object of class A
}
这里发生了什么? 我一直在努力找出问题,但我不能。 Plz帮助我。
Thanx:)
编辑:myMethod()中添加了四个NSLog
答案 0 :(得分:0)
保持对A类型对象的引用,但它应该与创建UIView的对象相同。因此,最好返回对象的单例实例。
使用返回的A类对象单例调用您的方法。
答案 1 :(得分:0)
确保A类对象中的myView
实例变量已初始化,并在B类调用MyMethod:
时添加到超级视图中。否则设置框架将没有任何效果。
答案 2 :(得分:-1)
因为myView不是属性,只需将其作为A类的属性并执行此操作
-(void)MyMethod:(NSString *)justCheck
{
CGRect mframe = [self.myView frame];
NSLog(@"------------> MyMethod Called = %@",justCheck);
mframe.origin.y = 42;
[self.myView setFrame:mframe];
}
使其成为属性而不是将其声明为 UIView * myView;
在.h
文件
@property(nonatomic,retain) UIView* myView;
并在.m
类的A
中执行此操作
@synthesize myView;
并且您无需更改代码中的任何内容,只需将所有myView
替换为self.myView