2013-01-21 25 views
0

我的FlipsideViewController的「完成」按鈕不起作用(沒有崩潰,但也沒有關閉視圖)。下面的代碼:FlipsideViewController不關閉

在FlipSideViewController.h

@class FlipsideViewController; 

@protocol FlipsideViewControllerDelegate 
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 
@end 

@interface FlipsideViewController : UIViewController 

@property (weak, nonatomic) id <FlipsideViewControllerDelegate> delegate; 

- (IBAction)done:(id)sender; 

@end 

在FlipSideViewController.m

- (IBAction)done:(id)sender 
{ 
// an NSLog statement that is here is logging properly 
[self.delegate flipsideViewControllerDidFinish:self]; 

} 

在MainViewController.h

@interface FifthViewController : UIViewController <FlipsideViewControllerDelegate> 
... 

在MainViewController.m

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller 
{ 
[self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"showAlternate"]) { 
    [[segue destinationViewController] setDelegate:self]; 
} 
} 

順便說一下,這是一個選項卡式應用程序,所以我認爲這可能與它有關。任何建議,將不勝感激。謝謝。

+0

把nslog放在'done:'中,是否打印? –

+0

是 - 正在打印 – eulr

+1

您是否將MainViewController設置爲FlipsideViewController的委託?嘗試在flipsideViewControllerDidFinish:方法中放入日誌,並查看它是否打印。 – rdelmar

回答

0

我發現了這個問題。如果您在問題的代碼看,MainViewController.m下,當務之急是你設置的SEGUE標識在故事板文件,以及在代碼:

if ([[segue identifier] isEqualToString:@"showAlternate"]) { 
[[segue destinationViewController] setDelegate:self]; 
} 

謝謝你,塞爾吉奧,你的幫助。

0

試試這個:

- (IBAction)done:(id)sender 
{ 
    // an NSLog statement that is here is logging properly 
    [self.delegate performSelector:@selector(flipsideViewControllerDidFinish:) 
      withObject:self 
      afterDelay:0.0]; 
} 

它發生的某個時候,該辭退必須在運行循環的下一次迭代執行。這就是上面的performSelector聲明完成的內容。

+0

沒有運氣。我將FlipsideViewController.h文件更改爲'@property(weak,nonatomic)NSObject * delegate;'擺脫錯誤信息,但視圖仍然沒有解僱。 (還是)感謝你的建議。 – eulr

+0

你是否檢查過''self.delegate'不是在'done:'中? – sergio

+0

我剛剛檢查 - 它是零。爲什麼? – eulr