我正在尝试隐藏viewController中的对象,代码是从自定义类执行的,但对象是nil。
FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
IBOutlet UILabel *testLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *testLabel;
- (void) hideLabel;
FirstViewController.m 我合成了testLabel,我有一个隐藏它的功能。如果我从viewDidAppear调用该函数它可以工作,但我想从我的其他类调用它。从其他类调用时,testLabel为nil
#import "FirstViewController.h"
#import "OtherClass.h"
@implementation FirstViewController
@synthesize testLabel;
- (void) hideLabel {
self.testLabel.hidden=YES;
NSLog(@"nil %d",(testLabel==nil)); //here I get nil 1 when called from OtherClass
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
OtherClass *otherClass = [[OtherClass alloc] init];
[otherClass hideThem];
//[self hideLabel]; //this works, it gets hidden
}
OtherClass.h
@class FirstViewController;
#import <Foundation/Foundation.h>
@interface OtherClass : NSObject {
FirstViewController *firstViewController;
}
@property (nonatomic, retain) FirstViewController *firstViewController;
-(void)hideThem;
@end
OtherClass.m 在FirstViewController中调用hideLabel函数。在我的原始项目中,(这显然是一个例子,但原始项目正在运行)我在这里下载了一些数据,我想在下载完成后隐藏我的加载标签和指示符
#import "OtherClass.h"
#import "FirstViewController.h"
@implementation OtherClass
@synthesize firstViewController;
-(void)hideThem {
firstViewController = [[FirstViewController alloc] init];
//[firstViewController.testLabel setHidden:YES]; //it doesn't work either
[firstViewController hideLabel];
}
有什么想法吗?
答案 0 :(得分:0)
您的UILabel
为零,因为您刚刚初始化了控制器,但没有加载它的视图。当您第一次要求访问绑定视图时,控制器的IBoutlet会自动从xib或storyboard实例化,因此为了访问它们,首先必须通过某种方式加载其视图。
编辑(在OP评论之后):
由于您的FirstViewController
已经初始化并且您的OtherClass
已由该控制器实例化,因此您可以只保留对它的引用,而不是尝试初始化新的- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
OtherClass *otherClass = [[OtherClass alloc] init];
otherClass.firstViewController = self;
[otherClass hideThem];
}
。
所以尝试这样的事情:
-(void)hideThem {
[self.firstViewController hideLabel];
}
在 OtherClass.m :
中{{1}}