2013-04-06 63 views
0

更新2故事板UIImagePicker覆蓋的UIButton不會關閉預覽

viewDidAppear執行兩次,一次是前後一次,覆蓋按鈕被觸摸。將修補程序添加一個條件到viewDidAppear這將返回到調用類的控制?如果是這樣,我會讚賞建議。或者,也許viewDidAppear執行兩次的事實表明另一種解決方法?

更新2

更新1

也許問題是我的如下所示的viewDidAppearviewDidLoad用法。任何人都可以幫忙嗎?

- (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

也許我並不清楚,不工作的版本,並且確實的區別之一是,故事板在使用一個不起作用。爲什麼done按鈕可以在沒有Storyboard的情況下工作,但不能與,即使只有一個筆尖涉及到疊加層?

更新0

The UIButton here能夠解僱相機預覽,但是在我的實際應用,敲擊的UIButton只是暫時解散預覽並覆蓋屏幕。立即預覽返回。我認爲問題在於我將代理實現到UIImagePicker的方式,但我可能是錯的。

I have created setup.zip here其中包含具有不良行爲的示例項目。

回答

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; 

我仍然希望這些步驟是不必要的,但他們似乎工作。