我有一个“静音”按钮,我需要放在所有视图控制器中,它的状态应该在它之间传输。我怎样才能实现这种行为?是否有像所有视图控制器的模板,或者我应该放置它并手动传输其状态?
提前致谢。
答案 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
。
希望它有所帮助。 (询问是否有任何疑问)
干杯。