ios bar不透明 - 什麼是放鬆,以及如何使用它們?





storyboard切換 controller用法 (6)


至於如何在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”

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

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

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




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

AH
BH

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

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

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

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




Swift iOS:

第1步:將此方法定義到MASTER控制器視圖中。 你想回去的地方:

//pragma mark - Unwind Seques
@IBAction func goToSideMenu(segue: UIStoryboardSegue) {

    println("Called goToSideMenu: unwind action")

}

第2步:(StoryBoard)右鍵單擊您的SLAVE / CHILD EXIT按鈕並選擇“goToSideMenu”作為連接您的操作按鈕,您將單擊該按鈕返回給您MASTER控制器視圖:

第3步:構建並運行...




例如,如果您從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已更改。




簡而言之

可以使用unwind segue (有時稱為exit segue )通過push,modal或popover segues導航回來(就像從導航欄中彈出導航項目,關閉彈出窗口或解除模態表示的視圖控制器一樣)。 除此之外,您實際上可以通過一系列push / modal / popover縮放來放鬆,例如,通過單個放鬆操作“導回”導航層次結構中的多個步驟。

當您執行展開順序時,您需要指定一個操作,這是您想要展開的視圖控制器的操作方法。

Objective-C的:

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}

迅速:

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}

當您在故事板中創建展開順序時,將使用此操作方法的名稱。 而且,這個方法在執行展開順序之前被調用。 您可以從傳遞的UIStoryboardSegue參數中獲取源視圖控制器,以便與啟動segue的視圖控制器交互(例如獲取模態視圖控制器的屬性值)。 在這方面,該方法具有與UIViewControllerprepareForSegue:方法類似的功能。

iOS 8更新: Unwind segues也適用於iOS 8的自適應遊戲,例如顯示顯示細節

一個例子

讓我們有一個導航控制器和三個子視圖控制器的故事板:

從綠色視圖控制器,您可以放鬆(導航回)紅色視圖控制器。 從藍色,您可以放鬆到綠色或通過綠色到紅色。 要啟用展開,您必須將特殊操作方法添加到紅色和綠色,例如,這裡是紅色的操作方法:

Objective-C的:

@implementation RedViewController

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}

@end

迅速:

@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}

添加操作方法後,您可以通過控制拖動到“退出”圖標來定義故事板中的展開順序。 這裡我們想按下按鈕時從綠色解開到紅色:

您必須選擇您想要展開的視圖控制器中定義的動作:

您也可以從藍色(這是導航堆棧中的“兩步走”)放鬆到紅色。 關鍵是選擇正確的展開動作。

在執行unwind segue之前,將調用操作方法。 在這個例子中,我定義了一個從綠色和藍色到紅色的展開順序。 我們可以通過UIStoryboardSegue參數訪問操作方法中展開的源代碼:

Objective-C的:

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
    UIViewController* sourceViewController = unwindSegue.sourceViewController;

    if ([sourceViewController isKindOfClass:[BlueViewController class]])
    {
        NSLog(@"Coming from BLUE!");
    }
    else if ([sourceViewController isKindOfClass:[GreenViewController class]])
    {
        NSLog(@"Coming from GREEN!");
    }
}

迅速:

@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
    if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
        println("Coming from BLUE")
    }
    else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
        println("Coming from RED")
    }
}

展開也可以通過推/模態組合來實現。 例如,如果我添加了另一個黃色視圖控制器與模式segue,我們可以從黃色一路退到紅色一步:

從代碼退出

當您通過控制 - 將東西拖動到視圖控制器的退出符號來定義展開漸變時,文檔大綱中會出現一個新的漸變:

選擇segue並轉到Attributes Inspector將顯示“標識符”屬性。 使用它給你的segue一個唯一的標識符:

在此之後,可以像其他任何segue一樣從代碼執行展開segue:

Objective-C的:

[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];

迅速:

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)



  1. 創建一個手動segue( ctrl -drag從文件所有者退出),
  2. 在綠色EXIT按鈕下方的左側控制器菜單中選擇它。

插入Segue的名稱以放鬆。

然後, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender. 與你的segue識別。





ios ios6 uistoryboard