来自iOS中另一个ViewController的访问按钮?

时间:2013-05-23 01:48:57

标签: ios uisegmentedcontrol viewcontroller

我有两个ViewControllers。一个有一个按钮,另一个ViewController有一个分段控件来打开或关闭按钮。我的问题是:如何在ViewController 2中关闭ViewController 1中的按钮?谢谢!

4 个答案:

答案 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");
        }
    }
}

这对你的意图是否足够?