2014-04-22 89 views
1

如果我從一個視圖控制器到另一個視圖控制器有幾個segues,有沒有辦法將它們的標識符分配到一個變量中,這樣變量可以被引用而不是文字字符串,如下所示?如何爲segue名稱創建變量?

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:@"someSegueName"]){ 
    //push to view controller 
    } 
} 

我喜歡它,所以如果標識符名稱發生變化,它將更新變量賦值。

+0

不,沒有辦法做到這一點。如果以某種方式(通過插件的Obj-C運行時),如果你設法得到它,它將不會有用,只要你想。其原因是可以有一個ViewController的許多segue。所以你會得到一些標識符,你必須使用索引。現在,如果您爲數組和索引編碼,則必須在新的segue到來或刪除舊的segue時更改代碼。所以最終你必須改變代碼,這就是爲什麼它沒有用。 – CRDave

回答

1

我不高興得到它你爲什麼要這麼做?如果它適合你,你可以嘗試下面的邏輯。

您可以通過將不同的segue枚舉值作爲字符串並使用該字符串作爲標識符來嘗試enum。

可存儲在陣列並通過創建用於每一個標識符常量相應

另一種方法是使用。

+0

如果標識符名稱已更改,則您的所有建議都需要在兩個位置更新標識符。最好從Xcode存儲它的地方獲取標識符名稱,並將該值分配給某個全局變量。 – 4thSpace

+0

我不認爲這是可能的。 –

+0

@ 4thSpace在這裏使用segue名稱就像是說,你是那個segue(因爲這個方法對於所有的segues都是通用的)。如果您不使用該名稱,那麼您如何期望運行時確定這是否是賽格?我不認爲你可以在故事板中的segue中更改segue的名稱,如果這是你想要的。當然,您可以編寫一個實用程序來更新故事板中的segue名稱,然後將其轉到您的課程文件並更新它。但這是另一個矯枉過正。 –

0

時,該方法被稱爲第一次以這種方式你可以將它保存到一個變量: -

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:@"someSegueName"]){ 
     someVariable = seague; // This is my addition. 
     //push to view controller 
    } 
} 

不過,我會建議您保存在一個字符串常量的SEGUE名字在你的類,以便你可以反覆使用,不會犯錯誤。這樣,稍後更改segue名稱也會更容易。

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:someVariable]){ //I've changed this line 
     someVariable = seague; 
     //push to view controller 
    } 
}