self.view.stuff在方法内部不起作用

时间:2014-07-16 07:14:15

标签: ios objective-c ios7

我在尝试在以下方法中创建简单视图背景时遇到了一些麻烦:

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"];

我在这里缺少什么,我该如何解决?

3 个答案:

答案 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
 }

它不工作的原因是因为你写了这个方法,但是你没有调用方法

希望有所帮助