更新2
viewDidAppear
执行两次,前一次和后一次触摸覆盖按钮。修复是否会向viewDidAppear
添加一个条件,它会将控制权返回给调用类?如果是这样,我会很感激的建议。或许viewDidAppear
执行两次这一事实表明了另一种修复方法?
更新2
更新1
问题可能是我对viewDidAppear
和viewDidLoad
的使用情况,如下所示。有人可以帮忙吗?
- (void)viewDidAppear:(BOOL)animated
{
self.overlayViewController = [[BSsetupOverlayViewController alloc] initWithNibName:@"BSsetupOverlayViewController" bundle:nil] ;
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
self.overlayViewController.delegate = self;
[self showImagePicker:UIImagePickerControllerSourceTypeCamera];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
更新1
更新0
也许我不清楚不起作用的版本与那个版本之间的区别是Storyboard用于不起作用的版本。为什么done
按钮可以在没有Storyboard的情况下工作,但不能使用,即使只有一个笔尖与覆盖图有关?
更新0
The UIButton here能够解除相机预览,但在我的实际应用中,点击UIButton只能暂时取消预览和覆盖屏幕。立即返回预览。我认为问题在于我实现UIImagePicker委托的方式,但我可能错了。
I have created setup.zip
here,其中包含具有不良行为的示例项目。
答案 0 :(得分:0)
I took this question to the North Atlanta iOS Meetup 并建议条件子句可以解决问题,正如我在问题的更新2 中提到的那样。 Meetup的创始人Kurt Niemi通过编辑BSsetupViewController
课程快速展示了如何做到这一点。
首先,他在界面中添加了一个布尔属性。
@property (nonatomic, assign) BOOL alreadyDisplayed;
其次,他在viewDidAppear
方法中添加了一个子句。
if (self.alreadyDisplayed)
{
self.alreadyDisplayed = FALSE;
[self dismissViewControllerAnimated:NO completion:nil];
return;
}
self.alreadyDisplayed = TRUE;
最后他在viewDidLoad
方法中添加了一个不必要的条款。
self.alreadyDisplayed = FALSE;
我仍然希望这些步骤不必要,但它们似乎有效。