我有2个视图控制器,第一个是故事板(这是root),第二个是nibless。当我按下根视图控制器中的按钮时,它应该调用第二个控制器。
这是我的第二个视图控制器的代码:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
UILabel *sampleLabel = [[UILabel alloc] initWithFrame: CGRectMake(0,0,100,100)];
UIImageView * basketItem = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"B.jpg"]];
[self.view addSubview:sampleLabel];
[self.view addSubview:basketItem];
NSLog(@"%@",self.view.subviews);
sampleLabel.text = @"Main Menu";
}
return self;
}
self.view.sebviews查询显示2个对象标签和imageView对象存在,但实际上我只看到黑屏。
这是转换方法
- (void)transitionToViewController:(UIViewController *)aViewController
withOptions:(UIViewAnimationOptions)options
{
aViewController.view.frame = self.containerView.bounds;
[UIView transitionWithView:self.containerView
duration:0.65f
options:options
animations:^{
[self.viewController.view removeFromSuperview];
[self.containerView addSubview:aViewController.view];
}
completion:^(BOOL finished){
self.viewController = aViewController;
}];
}
答案 0 :(得分:2)
移动viewDidLoad
中的代码。在这里,您确定视图已加载到内存中,因此可以进一步自定义。
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *sampleLabel = [[UILabel alloc] initWithFrame: CGRectMake(0,100,100,100)];
UIImageView * basketItem = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"B.jpg"]];
[self.view addSubview:sampleLabel];
[self.view addSubview:basketItem];
NSLog(@"%@",self.view.subviews);
sampleLabel.text = @"Main Menu";
}
如果您不使用ARC,请注意内存泄漏。
注意强>
我真的建议您阅读Apple doc。你应该了解事情是如何运作的。希望有所帮助。
修改强>
我不知道问题是什么。要使其有效,请尝试覆盖loadView
(在MenuViewController
)方法中,如下所示:
- (void)loadView
{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
contentView.backgroundColor = [UIColor redColor]; // red color only for debug purposes
self.view = contentView;
}
在我写的时候保留viewDidLoad
方法,看看会发生什么。
创建视图控制器时,只使用init
方法。
MenuViewController *vc = [[MenuViewController alloc] init];
答案 1 :(得分:1)
UILabel
frame
size.width=0
有CGRectMake(0,100,0,100)
:
B.jpg
如果UIImageView
未添加到项目中,则您UIViewController
也将为空。
此外,如果第二个- (id)init
没有XIB,请使用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
方法而不是{{1}}对其进行初始化。