如何在所有视图控制器之间放置按钮并传输其状态

时间:2014-07-22 08:09:08

标签: ios objective-c cocoa-touch

我有一个“静音”按钮,我需要放在所有视图控制器中,它的状态应该在它之间传输。我怎样才能实现这种行为?是否有像所有视图控制器的模板,或者我应该放置它并手动传输其状态?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以在更改时将其状态表示保存在NSUserDefaults中,并在需要时将其读取。

另一个解决方案可以是单例类。单例类的解决方案有时用于游戏。该课程保留所有设置。更改设置很容易,也很容易阅读。

如果在按钮更改时需要通知其他类,则可以向单例添加通知或委托。

答案 1 :(得分:1)

我建议使用Singleton(details here)来存储它的状态(例如,有一个@property BOOL enabled)。但是你必须手动将它放在所有屏幕上,并在加载时从单例中检索状态。
将它放在所有视图上的一种方法是创建一个UIViewController子类(例如名为MuteButtonViewController),覆盖viewDidLoad并在其中创建按钮。然后为您需要静音按钮的MuteButtonViewController子类UIViewControllers

答案 2 :(得分:1)

最好的方法是创建一个Super Class,它将一起处理静音按钮的行为。请参阅实施。

创建一个UIViewController类型的超级类,比如BaseViewController。所以它应该如下所示

<强> BaseViewController.h

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController

@end

<强> BaseViewController.m

#import "BaseViewController.h"

@interface BaseViewController ()

@end

@implementation BaseViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self prepareVolumeButton];

}

-(void)prepareVolumeButton{

     //CREATE BUTTON

     [self.view addSubView:self.muteButton];

     [self.muteButton addTarget:self action:@selector(volumeAction:) forControlEvents:UIControlEventTouchUpInside];

     self.muteButton.selected=[[[NSUserDefaults standardUserDefaults] objectForKey:@"volume"] boolValue];

}

-(IBAction)volumeAction:(id)sender{
    UIButton *btn=(UIButton *)sender;
    btn.selected=!btn.selected;
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:btn.selected] forKey:@"volume"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

现在最后,只需将Base Class(UIViewController).h更改为您想要{J}的所有UIViewControllers中的BaseViewController

希望它有所帮助。 (询问是否有任何疑问)

干杯。