2012-12-04 34 views
62

嘗試查看UIViewController或UIView是否可以識別它的Storyboard ID。因此,希望爲:以編程方式獲取故事板ID?

UIViewController *aViewController; 
    NSString *storyboardID = aViewController.storyboard.id; //not an actual property 

或:

NSString *storyboardID = [aViewController.storyboard valueForKey:@"storyboardId"]; //also not a working call 

,但沒有喜悅,無法在網上找到類似的解決方案。有誰知道這是否可能?

+0

只是感興趣的一點,您可以使用'[aViewController.storyboard valueForKey:@「name」];'。其他答案雖然更好。 –

+0

它是'storyboardIdentifier'。 – Andy

+0

@Andy storyboardIdentifier在哪裏? – ArgaPK

回答

86

您可以使用restoreIdentifier,它位於故事板標識的正上方,它是一個UIViewController屬性。

+0

對於爲早期iOS版本製作應用程序或靜態庫的人,restoreIdentifier屬性爲iOS 6.0+ – Jalakoo

+5

只需在「界面」構建器中勾選「使用Storyboard ID」即可自動將故事板ID用作restoreIdentifier屬性。它將被動態設置,而不必輸入兩次。 – thgc

+3

[參考restoreIdentifier](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instp/UIViewController/restorationIdentifier)說:'價值該屬性默認爲零,這表明視圖的狀態不需要保存。 這意味着將restorationIdentifier設置爲非零有一些副作用! – ypresto

20

故事板ID僅用於從故事板中查找和實例化VC。 正如UIStoryboard參考文獻所述:

「此標識符不是視圖控制器對象本身的屬性,僅供故事板文件用於查找視圖控制器。」

爲什麼你需要它?

+1

以編程方式探索以獨特方式識別viewControllers及其視圖的不同方式。 .tag,.title,.accessibilityLabel,.nibName都可以正常工作。對象Ids我認爲是(私人?),所以想知道Storyboard ID是否可以選擇。 – Jalakoo

+1

也許你可以使用控制器類名稱「生成」標識符 –

+0

我在項目中使用了40多個視圖控制器,並且我無意爲它們中的每一個設置一些新值以便於定位。恢復ID已經爲我設置。 – vedrano

54

你可以使用恢復ID:

NSString *restorationId = self.restorationIdentifier; 

只需選中複選框「使用故事板ID」

+0

謝謝!奇蹟般有效! – Genevios

+0

我越來越無 –

1

爲返回的的UIViewController或UIView的的「ID」是最可靠的方法...

NSString *viewControllerName = [[NSString alloc] initWithString:viewController.nibName]; 

這將返回...... 「29瓦特集成電路(IC)LNO - 視圖 - FDU-OQ-UPZ」,其中 「29瓦特集成電路(IC)LNO」 是的UIViewController的對象ID和「FDU-OQ- UpZ「是UIView的對象ID。

但是,你也可以使用...

NSString *viewControllerName = [[NSString alloc] initWithString:viewController.title]; 

這將返回的UIViewController中的「標題」,在屬性檢查器;所以就像您將故事板ID添加到UIViewController一樣簡單,您也可以添加標題。

0

您可以與班級名稱進行比較。 導入類,然後嘗試。

NSArray *viewControllers = self.navigationController.viewControllers; 
UIViewController *root = [viewControllers objectAtIndex:0]; 
if ([root isKindOfClass:[UserLogin class]]) { 
//--- do --- 
} 
5

您也可以嘗試做這樣的事情: -

NSString *restorationId = [viewController valueForKey:@"storyboardIdentifier"]; 

這恰恰給你,你已經通過界面生成器設置故事板標識。

相關問題