簡體   English   中英

以編程方式枚舉 UIViewController 的傳出 Segue

[英]Programmatically enumerate outgoing Segues for a UIViewController

對於視圖控制器之間的 iOS 5 導航, UIViewController類提供了[self performSegueWithIdentifier:@"MySegue" sender:sender]選擇器。 據推測,在[@"MySegue", @"MySegue2"]故事板實現知道從任何視圖控制器傳出的 segue 標識符列表,即[@"MySegue", @"MySegue2"] 有沒有辦法以編程方式訪問此列表,以獲取可以傳遞給 performSegueWithIdentifier 的標識符?

這是一種無證行為,但

NSArray *segueTemplates = [self valueForKey:@"storyboardSegueTemplates"] ;  

應該返回一個數組,其中包含可以傳遞給performSegueWithIdentifier所有可能的 segue 值。

沒有用於枚舉故事板中的 segue 的公共 API。

對於Objective-C,如果我知道segue 名稱,我曾經使用它。

- (BOOL)isValidSegueId:(NSString *)segueId {
    NSArray *filteredArray = [[self valueForKey:@"storyboardSegueTemplates"] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"identifier = %@", segueId]];
    return filteredArray.count > 0;
}

迅速:

    func isValidSegueId(_ segueId: String?) -> Bool {
    let filteredArray = (value(forKey: "storyboardSegueTemplates") as? NSArray)?.filtered(using: NSPredicate(format: "identifier = %@", segueId ?? ""))
    return (filteredArray?.count ?? 0) > 0
}

您可以將其與此鏈接https://stackoverflow.com/a/35060917/1058199結合使用以獲取當前視圖控制器的所有 segue 並驗證每個。

將所有與視圖控制器相關的segue存儲在一個數組中,然后在視圖控制器中訪問這個數組。

暫無
暫無

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

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