我有两个ViewControllers。一个有一个按钮,另一个ViewController有一个分段控件来打开或关闭按钮。我的问题是:如何在ViewController 2中关闭ViewController 1中的按钮?谢谢!
答案 0 :(得分:2)
最简单的方法是将按钮声明为头文件中的属性,并直接从其他文件访问。但是它很难看并且增加了代码耦合。您可以使用make one controller作为其他人的委托,并在段控制状态发生变化时通知委托。
答案 1 :(得分:2)
或者您可以使用通知
在View Controller 1中:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(togglebutton) name:@"togglebutton" object:nil];
和方法
-(void)togglebutton{
//turn button on/off
}
在ViewController 2中:
[[NSNotificationCenter defaultCenter]postNotificationName:@"togglebutton" object:nil];
答案 2 :(得分:0)
而不是将该按钮声明为头文件中的属性
在viewcontroller1中写一个方法,它有一个按钮 并在该方法中打开/关闭按钮
现在你可以从其他具有分段控件的viewcontroller2调用此方法来打开或关闭按钮。
答案 3 :(得分:0)
也许不是最好的解决方案,但我最好的猜测是你的分段控件是你的应用程序的某种转换。
在这种情况下,在 ViewController2 中,当您更改分段控件的值时,可以将其写入NSUserDefaults
,如下所示:
-(void)segmentedControlChanged:(id)sender
{
UISegmentedControl *ctrl = (UISegmentedControl *)sender;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:ctrl.selectedSegmentIndex] forKey:@"selectedIndex"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
然后在 ViewController1 的viewDidAppear
方法中,检查 selectedIndex 的值,如下所示:
-(void)viewWillAppear:(BOOL)animated
{
NSNumber *selectedIndex = [[NSUserDefaults standardUserDefaults] valueForKey:@"selectedIndex"];
if(selectedIndex != nil)
{
if([selectedIndex intValue] == 0)
{
NSLog(@"do action 1");
}
else
{
NSLog(@"else do action 2");
}
}
}
这对你的意图是否足够?