Objective c 从对象c中的ClassB更改ClassA的alpha和启用的UIButton

Objective c 从对象c中的ClassB更改ClassA的alpha和启用的UIButton,objective-c,class,Objective C,Class,我在类B中更改了UIButton的参数,但UIButton是在类a中声明的。 从B班我怎么看 简单地说: _closeButton.alpha = 1; _closeButton.enabled = TRUE; 谢谢回复 好的,我试过这个: B.h类 ClassA * _closeButtonController; // ... @property (nonatomic, retain) ClassA * _closeButtonController; ClassA*\u关闭按钮控制器 在

我在类B中更改了UIButton的参数,但UIButton是在类a中声明的。 从B班我怎么看

简单地说:

_closeButton.alpha = 1;
_closeButton.enabled = TRUE;

谢谢回复

好的,我试过这个: B.h类

ClassA * _closeButtonController;
// ...
@property (nonatomic, retain) ClassA * _closeButtonController;
ClassA*\u关闭按钮控制器

在ClassB.m didLoad中:

_closeButtonController=[[ClassA alloc]initWithNibName:@“ClassA”bundle:nil]; _closeButtonController.\u closeButton.enabled=TRUE; _closeButton控制器。\u closeButton.alpha=1

我没有错误,但不工作


@Warkst在ClassA.h中我有delcareed@property(非原子,保留)ibuibutton*\u closeButton;在ClassA.m@synthesis\u closeButton中;在任何地方使用下划线! 我已通过此代码解决: A.m班

    - (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showAndEnableCloseButton) name:@"EnableCloseButton" object:nil];
}
- (void)showAndEnableCloseButton{
    self._closeButton.alpha = 1;
    self._closeButton.enabled = YES;
}

B.m班 当“触碰内部”UIButton时,关闭ClassB视图并返回ClassA视图,调用意味着通知中心ClassA关闭按钮中的更改:

- (IBAction)close:(id)sender
{
    [[NSNotificationCenter defaultCenter]postNotificationName:@"EnableCloseButton" object:self];
    [self.view removeFromSuperview];
}
我希望我能帮上什么人, 谢谢大家的回复!
你好

以类B中的classA对象为例。当您从类A转到类B时,然后设置classBObject.classAobj=self。

我想您可以在类A中添加一个方法,设置按钮的参数,然后从类B调用该方法,假设您有对classA对象的引用。因此:

在A.h级

- (void)showAndEnableCloseButton;
A.m班

    - (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showAndEnableCloseButton) name:@"EnableCloseButton" object:nil];
}
- (void)showAndEnableCloseButton{
    self._closeButton.alpha = 1;
    self._closeButton.enabled = YES;
}
B.h类

ClassA * _closeButtonController;
// ...
@property (nonatomic, retain) ClassA * _closeButtonController;
B.m班

@synthesize _closeButtonController;
然后,在ClassA对象中,创建ClassB对象:

// somewhere in the code from ClassA.m
ClassB * bObj = [[ClassB alloc] init];
bObj._closeButtonController = self;
// ...
然后,当您想从ClassB中的某个位置修改按钮时,只需执行以下操作:

//...
[self._closeButtonController showAndEnableCloseButton];
//...

这应该行得通。希望有帮助

您应该使用委派来完成此操作。ClassA将是ClassB的代表。当ClassB需要更改ClassA中的UIButton时,它从ClassA(其委托)调用一个方法,该方法直接执行此操作。B类内部:

[self.delegate changeButtonFor:self];
ClassA中的changeButton方法将直接对UIButton执行您想要的操作

您需要在ClassB中创建一个委托属性,并在执行以下操作之前将其设置为ClassA:

self.delegate = _closeButtonController;
这是您需要放在ClassB头文件中的内容:

@class ClassB;

@protocol ButtonDelegate
- (void)changeButtonFor:(ClassB *)aClass;
@end

@interface ClassB : ...
{
    id <ButtonDelegate> delegate;
}

@property (assign) id <ButtonDelegate> delegate;
现在,在ClassA的头文件中,声明它采用ButtonDelegate协议:

#import "ClassB.h"

@interface ClassA: ... <ButtonDelegate>

嗯,我不太明白,你能再解释一下吗?THNKS!好的,你是怎么申报财产的?它是这样的:属性(…)UIButton*closeButton;然后在.m文件中合成closeButton=\u closeButton?还是到处都是下划线?IBOutlet的名称如何?好的,我在bObj中有一个警告“!”。\u closeButtonController=self;不兼容的指针类型从“ClassB*”分配给“ClassA*”首先,我犯了一个小错误,您应该将ClassB.h中变量的名称从closeButtonController更改为_closeButtonController。其次,在我提供的代码中,您将bObj的委托分配给self,我假设您在ClassA对象中这样做。如果没有,请将“self”更改为包含对closeButton的引用的任何ClassA对象。我在:'@protocol ButtonDelegate-(void)ChangeButton:(ClassB*)类中有一个错误@结束;'应在
@protocol
语句之前键入:
@ClassB。我做了一些改进:将参数名称从
class
更改为
aClass
(在头和实现中)。