簡體   English   中英

以編程方式解開Segue - 新的轉折

[英]Unwind Segue Programmatically - New twist

背景:我有兩個VC,A和B. VC A包含幾個按鈕和幾個標簽。 在VC A中按下按鈕時,會顯示VC B / C /等。 現在,當完成VC A / B / C時,segue正在展開,以便出現VC A. 對於大多數VC B / C / D等,我使用unwind方法,我通過該VC中的按鈕觸發(ctrl +拖動到“退出”圖標)。 這很有效,因為在返回VC A時,會自動調用以下操作:

- (IBAction)returned:(UIStoryboardSegue *)segue {
// Here I do some stuff 
}

問題:現在,在其中一個輔助VC(例如D)中,事情有點特殊。 在此VC中,我以編程方式通過循環生成了數百個按鈕,然后檢測按下了哪個按鈕,最后退回到VC A(沒有特定按鈕;任何按鈕都將觸發展開)。 我知道我可以這樣做,例如使用它

[self dismissViewControllerAnimated: YES completion: nil]

但是當返回VC A或使用此操作時,這不會觸發上述操作

[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]

但這會生成我不想要的VC A新實例(因為VC A實例中的標簽已包含一些信息)。

所以,我想要的是能夠返回生成VC D的VC A的同一個實例,並觸發上面列出的“返回”操作。 因此,我希望獲得與使用連接到“退出”圖標的按鈕相同的效果,但是當我按下VC D中的多個按鈕之一時,我希望通過編程在“代碼內”進行此操作。

有什么想法嗎?

[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]應該可以正常工作。 放松segues不會創建目的地的新實例,無論它們如何執行。 它們的獨特之處在於它是唯一不會創建目標新實例的segue。

您可以通過控制+從場景的視圖控制器圖標拖動到其退出圖標來以編程方式創建unwindsegue。 將標識符分配給此展開窗口后,可以以編程方式調用它。

參考: https//developer.apple.com/library/ios/technotes/tn2298/_index.html

烏拉斯已正確理解並回答了這個問題。 原始張貼者希望確保在放開時調用放開'(IBAction)myCustomName:(UIStoryboardSegue *)segue'選擇器,而不必“手動”將按鈕鏈接到放開序列。 為了強調這一點,假設您在運行時基於某些條件以編程方式創建按鈕。 您無法手動將該按鈕連接到展開segue。 你需要在VC B中做這樣的事情......

UIBarButtonItem *dynamicButton = [[UIBarButtonItem alloc]
                       initWithTitle:@"Cool"
                       style:UIBarButtonItemStyleBordered
                       target:self
                       action:@selector(killView)];
self.navigationItem.leftBarButtonItem = dynamicButton;


- (void) killView
{
    [self performSegueWithIdentifier:@"TEST" sender:self];
} 

“TEST”segue是從VC B手動建立的(即視圖控制器本身不是按鈕)。 單擊該按鈕時,它將調用killView方法,並通過標識符觸發segue。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM