使用presentModalViewController添加视图
问题描述:
我有一个名为TripViewController的UIViewController子类。这个类有下面的方法:使用presentModalViewController添加视图
- (void)lockScreen {
LockOverlay *lockOverlay = [[LockOverlay alloc] init];
[self presentModalViewController: lockOverlay animated:YES];
}
LockOverlay也是UIViewController子类,定义如下(该代码的其余部分仅仅是自动生成的存根):
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
CGRect frame = CGRectMake(0, 0, 225, 37);
UIImageView *sliderBackground = [[UIImageView alloc] initWithFrame:frame];
sliderBackground.image = [UIImage imageNamed:@"slider-bar.png"];
UIImageView *unlock = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"unlock.png"]];
[sliderBackground addSubview:unlock];
frame = CGRectMake(10, 360, 225, 37);
Slider *slider = [[Slider alloc] initWithFrame:frame];
[slider addSubview:sliderBackground];
slider.unlock = unlock;
[self.view addSubview:slider];
}
当LOCKSCREEN被调用,该程序进入无限循环,并且loadView被反复调用。
那么,我在这里做错了什么?我之前有过这样的错误......在App Delegate中,我创建了一个TabBarController,其中一个视图有一个NavigationController。当我尝试将View而不是NavigationViewController添加到tabBar数组时,我得到了同样的错误。我认为这个问题是相似的,我并没有把新的ViewController推到正确的位置,但这只是一个猜测。
答
我改变loadView为initWithFrame并返回自我。它现在有效。
答
前
[self.view addSubview:slider];
你应该有类似
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
这是因为self.view还不存在......那是什么的loadView是!它被记录在UIViewController文档中,视图属性的实现是在访问(vs分配)时,到目前为止它是零,它调用loadView来首先创建视图。你的loadView假设一个视图存在,并试图添加一个子视图,该访问导致视图控制器再次调用loadView。
loadView的覆盖应该始终将self.view分配给某些视图即填充屏幕