0

更新 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 的情况下可以工作,但在覆盖层中只涉及一个 nib 时却不行?

更新 0

此处的 UIButton能够关闭相机预览,但在我的实际应用中,点击 UIButton 只会暂时关闭预览和覆盖屏幕。预览立即返回。我认为问题在于我实现 UIImagePicker 的委托的方式,但我可能错了。

我在setup.zip这里创建了一个包含不良行为的示例项目。

4

1 回答 1

0

正如我在问题的更新 2中提到的那样,我将这个问题带到了北亚特兰大 iOS 聚会上,并建议条件子句可能会解决问题。BSsetupViewControllerMeetup 的创始人 Kurt Niemi 通过编辑课程快速展示了如何做到这一点。

首先,他在界面中添加了一个布尔属性。

@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;

我仍然希望这些步骤是不必要的,但它们似乎有效。

于 2013-04-12T21:39:00.020 回答