[ios] 什麼是放鬆,以及如何使用它們?


Answers

至於如何在StoryBoard中使用展開...

步驟1)

轉到您希望展開的視圖控制器的代碼並添加以下代碼:

Objective-C的

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
    //nothing goes here
}

一定要在Obj-C的.h文件中聲明這個方法

迅速

@IBAction func unwindToViewControllerNameHere(segue: UIStoryboardSegue) {
    //nothing goes here
}

第2步)

在故事板中,轉到您想要放鬆的視圖,只需從按鈕或從源視圖右上角的小橙色“EXIT”圖標拖動一個segue即可。

現在應該有一個選項來連接到“ - unwindToViewControllerNameHere”

就是這樣,當你的按鈕被點擊時,你的繼續會放鬆。

Question

iOS 6和Xcode 4.5有一個新功能,被稱為“解開Segue”:

展開細分可以允許轉換到故事板中的現有場景實例

除了Xcode 4.5的發行說明中的簡短條目之外,UIViewController現在似乎還有一些新的方法:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender
- (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier

放鬆節奏如何運作以及它們可以用於什麼?




例如,如果您從viewControllerB導航到viewControllerA,那麼在您的viewControllerA下面的委託將調用和數據將共享。

@IBAction func unWindSeague (_ sender : UIStoryboardSegue) {
        if sender.source is ViewControllerB  {
            if let _ = sender.source as? ViewControllerB {
                self.textLabel.text = "Came from B = B->A , B exited"
            }
            
        }

}
  • 展開Seague Source View Controller(您需要將Exit Button連接到VC的退出圖標並將其連接到unwindseague:

  • Unwind Seague已完成 - > viewControllerA的TextLabel已更改。




我在這裡沒有看到其他答案中提到的一些東西,那就是當你不知道最初的起始位置在哪裡時,你如何處理解開,這對我來說是一個更重要的用例。 例如,假設您有一個從兩個不同的視圖控制器( AB )以模態方式顯示的幫助視圖控制器( H ):

AH
BH

你如何設置unwind segue,以便返回到正確的視圖控制器? 答案是你在AB中聲明一個具有相同名稱的展開動作,例如:

// put in AViewController.swift and BViewController.swift
@IBAction func unwindFromHelp(sender: UIStoryboardSegue) {
    // empty
}

這樣,展開會發現哪個視圖控制器( AB )啟動了這個繼續並返回到它。

換句話說,將展開的動作想像為描述賽格從何而來 ,而不是它將要發生的地方。






Links