我在尝试在以下方法中创建简单视图背景时遇到了一些麻烦:
self.view.backgroundColor=[UIColor redColor];
它适用于“ - (void)viewDidLoad”,但不适用于我的。 继承人.m:
#import "DetailView.h"
#import "MainViewController.h"
@interface DetailView ()
@end
@implementation DetailView
static DetailView *_sharedInstance;
MainViewController *mainView;
+ (DetailView *) sharedInstance
{
if (!_sharedInstance)
{
_sharedInstance = [[DetailView alloc] init];
}
return _sharedInstance;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
mainView = [MainViewController sharedInstance];
self.view.backgroundColor=[UIColor redColor]; //Works here! D:
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)createOption:(CGRect)pos Valor1:(NSString *)valor1 Valor2:(NSString *)valor2{
self.view.backgroundColor=[UIColor redColor]; //Doesn't work here :(
}
@end
这是我的.h:
#import <UIKit/UIKit.h>
@interface DetailView : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *controlVar;
+ (DetailView *) sharedInstance;
-(void)createOption:(CGRect)pos Valor1:(NSString *)valor1 Valor2:(NSString *)valor2;
@end
编辑: 这是我在调用'createOption'的地方(在另一个类的viewDidLoad上):
DetailView *detailView = [DetailView sharedInstance];
[detailView createOption:CGRectMake(0, 0, 50, 50) Valor1:@"Teste1" Valor2:@"Teste2"];
我在这里缺少什么,我该如何解决?
答案 0 :(得分:0)
我认为问题是您没有使用屏幕上的实例实例化DetailView sharedInstance。看看这段代码:
在ViewController.m中
static ViewController *sharedInstance = nil;
+(void)setSharedInstance:(ViewController *)someInstance
{
sharedInstance = (ViewController *)someInstance;
}
+(ViewController *)sharedInstance
{
return sharedInstance;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[ViewController setSharedInstance:self];
}
在第二个ViewController中:
- (void)viewDidLoad
{
[super viewDidLoad];
ViewController *shared = [ViewController sharedInstance];
shared.view.backgroundColor = [UIColor redColor]; //现在正在工作 }
不要忘记将.h文件中的类方法设置为公共,并在第二个ViewController中导入第一个ViewController。
答案 1 :(得分:0)
根据讨论,您正在尝试创建一个可以在不同UIViewControllers
中轻松使用的常用函数。通过创建UIViewController类别类并添加额外功能可以轻松实现。见下文
<强> UIViewController+Additions.h
强>
#import <UIKit/UIKit.h>
@interface UIViewController (Additions)
-(void)createOption:(CGRect)pos Valor1:(NSString *)valor1 Valor2:(NSString *)valor2;
@end
<强> UIViewController+Additions.m
强>
#import "UIViewController+Additions.h"
@implementation UIViewController (Additions)
-(void)createOption:(CGRect)pos Valor1:(NSString *)valor1 Valor2:(NSString *)valor2{
self.view.backgroundColor=[UIColor redColor];
}
@end
现在在您的其他课程中添加#import "UIViewController+Additions.h"
,然后在viewDidLoad
中调用
[self createOption:CGRectMake(0, 0, 50, 50) Valor1:@"Teste1" Valor2:@"Teste2"];
但问题是为什么你的代码不起作用,因为你有错误的引用。虽然我所描述的方式是实现这种实现的正确方法。另一种方法是创建普通的UIViewController
类添加属性,并将第二个视图控制器的UIViewController类更改为BaseViewController。
我希望它有所帮助。
干杯。
答案 2 :(得分:0)
它在那里不起作用,因为你在背景中写了变化的方法,即createOption。 在viewDidLoad或您计划添加的任何IBaction中调用方法。
- (void)viewDidLoad
{
[super viewDidLoad];
mainView = [MainViewController sharedInstance];
[self createOption:(CGRect)pos Valor1:yourParameter1 Valor2:yourParameter2]; // now this will work too :D
}
它不工作的原因是因为你写了这个方法,但是你没有调用方法
希望有所帮助