使用其他类对象访问对象(UIView)时出现问题!

时间:2011-07-26 11:34:45

标签: iphone objective-c uiview

我有两个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

3 个答案:

答案 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