2012-03-23 50 views
6

我正在研究此tutorial,其中顯示瞭如何使用故事板創建應用程序。我的viewController有兩個UIButtons,我已經連接到這些UIButtons的segue。這些segues推送一個新的viewController。我如何取消連接到UIButton的Segue

現在我正在尋找一種方法來取消這個segue,如果某個條件成立的話。當我使用舊的xib文件來創建我的界面時,我可以這樣做:

-(IBAction)sendButton:(id)sender { 
    if(TRUE) { 
    // STOP !! 
    } 
} 

這不起作用了。我如何取消推送新的viewController?

+0

你的問題還不清楚。你的元素是如何掛鉤的?導航「進入新視圖」的代碼在哪裏? – Stavash 2012-03-23 09:58:00

+0

用戶可以手動取消點擊響應,方法是在鬆開按鈕之前將其手指鬆開...這是您的意思嗎?我同意上面的評論,這個問題還不清楚。 – 2012-03-23 10:11:24

+0

你必須閱讀隱藏在鏈接後面的教程,才能理解這個問題。這是關於一個連接到UIButton的故事板segue – 2012-03-23 10:24:51

回答

27

沒有。你不能取消直接鏈接到你的UIButton等界面元素的segues。

但有一個解決方法。

  1. 刪除鏈接到按鈕
  2. 的SEGUE從的viewController(具有的按鈕)到ViewController應該推添加SEGUE。這必須是沒有連接到界面元素的segue。要做到這一點,你可以從狀態欄開始繼續。或者在左邊欄中創建segue。
  3. 選擇此segue,打開屬性檢查器並更改segue的標識符(例如PushRedViewController)
  4. 選擇Xcodes助手視圖,以便您可以使用按鈕查看viewController的.h文件。
  5. 將按鈕連接到一個動作。要做到這一點,選擇按鈕並控制 - 拖動到.h文件。在菜單中選擇動作並命名的動作(例如redButtonPressed :)
  6. 打開您的viewController
  7. 變化從第5步的行動,像這樣實施:

    - (IBAction)redButtonPressed:(id)sender { 
        [self performSegueWithIdentifier:@"PushRedViewController" sender:sender]; 
    } 
    
+0

謝謝!有效。 – Qooe 2012-03-23 10:39:26

+2

現在可以使用ios5:http:// stackoverflow。com/questions/8066525/prevent-segue-in-prepareforsegue-method – 2012-12-30 01:55:31

+0

@Matthias Bauch,謝謝! – shuiyouren 2013-07-06 15:40:07

9

你可以其實通過添加下面的方法到你的代碼

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

if([identifier isEqualToString:@"btnSegue"]) 
{ 

    return YES; 
} 
else{ 
    return NO; 
} 

} 

讓我們假設你賽格瑞做,這是btnSegue.And如果甲腎上腺素編輯基於某些條件下進行的SEGUE你可以有下面的代碼

if(check) 
{ 
[self performSegueWithIdentifier:@"btnSegue" sender:self]; 
} 

如果檢查是BOOL,你可以根據你的條件設置真或假。

+0

爲什麼這不是被接受的答案? – TahoeWolverine 2015-11-03 23:13:53

+0

@TahoeWolverine謝謝,也許我已經回答了問題遲了:) – 2015-11-04 08:39:41