Iphone Objective-c/xcode-不同类中的访问按钮状态

Iphone Objective-c/xcode-不同类中的访问按钮状态,iphone,ios,objective-c,uibutton,Iphone,Ios,Objective C,Uibutton,所以我尝试了很多不同的方法,但都没能成功。我正在尝试更改其他类中UIbutton的状态 class1.h @property (strong, nonatomic) IBOutlet UIButton *monthly; class2.m - (void)viewDidLoad { ViewController *vc = [[ViewController alloc] init]; vc.monthly.enabled = NO; } 无论我尝试什么,无论我把代码放在哪里,

所以我尝试了很多不同的方法,但都没能成功。我正在尝试更改其他类中UIbutton的状态

class1.h

@property (strong, nonatomic) IBOutlet UIButton *monthly;
class2.m

- (void)viewDidLoad
{
    ViewController *vc = [[ViewController alloc] init];
    vc.monthly.enabled = NO;
}
无论我尝试什么,无论我把代码放在哪里,按钮状态都不会改变。当我在class2.m中记录状态时:

NSLog(vc.monthly.enabled ? @"Yes" : @"No");

它总是返回No,即使我在class2.m中只是将其声明为
YES
。长话短说:我的按钮属性不是从其他类更新的。如果需要查看更多代码,请告诉我,我会尽快更新。

使用堆栈中已存在的
ViewController
类的对象访问按钮。无需创建新对象,如
ViewController*vc=[[ViewController alloc]init]。当您这样做时,它会创建一个新对象,这样您就不会得到写操作。

我认为问题在于类实例。下一行创建新实例

ViewController*vc=[[ViewController alloc]init]

这就是为什么您的按钮状态没有改变,您必须获得以前创建的intstace的引用,而无需创建新实例

为此,您可以使用AppDelegate文件来声明class1的属性

请参阅下面的代码

AppDelegate.h

@属性(非原子,ratain)ViewController*vc

AppDelegate.m

@合成vc

现在,无论何时需要,都可以像下面这样alloc&初始化vc

AppDelegate*AppDelegate=(AppDelegate*)[[UIApplication 共享应用程序]委托]; vc=[[ViewController alloc]init]

另外,不要忘记在编写上述代码的地方导入AppDelegate.h文件


现在使用appDelegate.vc,您可以在项目的所有类中使用View Controller的所有属性

主要问题是每次检查按钮状态时都要创建新实例。但是按钮状态是针对您在
class1.h
中创建的按钮。因此,您需要在
Appdelegate
类中创建按钮,并从检查按钮状态和按钮状态的类中的
Appdelegate
获取实例。我想这会有帮助。

检查IBOutlet的连接。您在代码中找到UIButton的合适对象了吗?您没有访问您的按钮。您正在启动一个新的视图控制器并访问它的按钮。@Apurv您是什么意思。。?我不认为他们的插座有任何问题,因为它在主类中工作。@Desdenova那么我如何从其他类访问原始按钮?我还尝试使用一个全局变量集作为按钮状态,但这也不起作用。设置一个标志并使用该标志从viewDidLoad设置按钮状态:我完成了您建议的所有步骤,并在我的class2.m中添加了:-(void)viewDidLoad{NSLog(@“SPENDINGVIEW达到”);AppDelegate*AppDelegate=(AppDelegate*)[[UIApplication sharedApplication]delegate];AppDelegate.vc=[[ViewController alloc]init];appDelegate.vc.monthly.enabled=NO;}。NSLog正在运行,但我的按钮状态仍然没有更改。@Tarayaa您是否在class2.m中包含AppDelegate.h?是的,我没有收到任何错误,但状态没有更改。@Tarayaa请确保ViewController的instace只声明过一次project@P这给了我一个好的方向的线索,我有:@property(非原子,赋值)视图控制器*委托;在我的班上。我删除了整个AppDelegate行,只添加了:_delegate.monthly.enabled=NO;它成功了。你能解释一下为什么吗?