0

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

4

4 回答 4

2

最简单的方法是将按钮声明为头文件中的属性并直接从其他文件访问。但是它很丑陋并且增加了代码耦合。您可以使用将一个控制器作为另一个控制器的委托,并在段控制状态更改时通知委托。

于 2013-05-23T02:07:46.990 回答
2

否则你可以使用通知

在视图控制器 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];
于 2013-05-23T05:20:15.720 回答
0

也许不是最好的解决方案,但我最好的猜测是您的分段控件是您的应用程序的某种开关。

在这种情况下,在您的ViewController2中,当您更改分段控件的值时,您可以将其编写为NSUserDefaults

-(void)segmentedControlChanged:(id)sender
{
    UISegmentedControl *ctrl = (UISegmentedControl *)sender;

    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:ctrl.selectedSegmentIndex] forKey:@"selectedIndex"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

然后在ViewController1viewDidAppear方法中,检查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");
        }
    }
}

这足以满足您的意图吗?

于 2013-05-23T07:03:58.850 回答
0

而不是将该按钮声明为头文件中的属性

在具有按钮的 viewcontroller1 中编写一个方法,并在该方法中打开/关闭按钮

现在您可以从其他具有分段控件的 viewcontroller2 调用此方法来打开或关闭按钮。

于 2013-05-23T05:13:47.313 回答