2013-05-09 101 views
1

我完全失去了這個問題。我一直在使用故事板,我創建了一個帶有桌面視圖和一些東西的導航控制器。在tableview的每一行中有Services,我需要爲每個服務創建一個詳細視圖。故事板和編程視圖

有很多服務,所以我不能在故事板中創建它們。這個想法是從網絡服務(參數數量,每個類型等等)下載Services,並作爲適當的文本域/按鈕添加到Service

所以,我的問題和疑問是:

1)我可以結合故事板和視圖編程?當我在MyTableviewClass中創建NewView時,我應該在我的prepareforsegue方法中執行此操作嗎?如何在不丟失導航控制器的情況下在屏幕上顯示它?這是我有什麼(它不工作:它給我說,沒有賽格瑞名爲「服務1」):

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

if ([[segue identifier] isEqualToString:@"NextLevel"]) { 
    [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]]; 
} else if ([[segue identifier] isEqualToString:@"Service1"]) { 
    CGRect bounds = self.view.bounds; 
    UIView *myview = [[UIView alloc] initWithFrame:bounds]; 
    [myview setBackgroundColor: [UIColor redColor]]; 
    [self.view addSubview:myview]; 
    [self.view bringSubviewToFront:myview]; } 

任何一本書或引用歡迎,但我找不到類似的事情。這在iOS中非常複雜嗎?我在Java中做了類似的事情。我已經閱讀了關於動態生成接口的XIB,但是,真誠地,我不知道它是什麼.. 感謝所有。

回答

2

是的,您可以創建一個帶有視圖的StoryBoard,然後以編程方式向其添加視圖。

您不應該嘗試在您的prepareForSegue方法中創建視圖。這確實應該用於將對象傳遞給另一個ViewController

我會建議你這樣做。回到你的StoryBoard並創建一個新的UIViewController場景。點擊你的第一個場景,然後拖動到新的場景。接下來,點擊你的segue並給它一個名字。

第1步:

創建一個名爲ServicesViewController新的類,並確保它的UIViewController的`子類:

**enter image description here**

第2步:

圍棋回到你的StoryBoard並點擊場景以便它被選中。接下來,點擊Files Owner,最後點擊班級信息按鈕(第三個按鈕),最後選擇您剛創建的ServiceViewController班級。

enter image description here

第3步:

回到你ServicesViewControllerdidSelectRowAtIndex方法調用你塞克:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"YOUR_SEGUE_NAME" sender:nil]; 
} 

現在,在您的prepareForSegue方法清理掉所有的代碼和只是先讓它轉換下來。

+0

起初感謝您的回答。因此,我可以在故事板中創建一個新的ViewController(空),將其與我的'ServiceView'類關聯,並在ViewDidLoad中以編程方式生成接口,對吧? – Sergiodiaz53 2013-05-10 08:29:26

+0

我更新了更詳細的答案。我希望這可以幫助你更多!忽略場景中的UImageView,這是我的項目中的一個。它應該是一個空白的白色視圖。 – Flea 2013-05-10 14:41:16

+0

如何在UIButton按鈕上以編程方式添加按鈕到故事板視圖? – 2014-04-10 13:27:48

1

這聽起來像你只是在tableView中有多個單元格。您可以簡單地使用不同的標識符創建不同的單元格,並根據從您的Web服務填充的服務數組中檢測到的服務來顯示或隱藏它們,而不是使用segues。

+0

感謝您的幫助,MarkM,但我的問題是我如何能夠動態地生成接口,一旦我有我的tableview工作。無論如何,我認爲我可以繼續與上面的答案。 – Sergiodiaz53 2013-05-10 08:32:35

2

除了Flea的回答,如果您需要保留導航控制器,只需通過控制從視圖控制器的視圖控制器視圖中的文件所有者圖標(視圖控制器視圖下方的黃色框)拖動,在故事板中創建一個推動區域到您添加到故事板的ServiceViewController,這應顯示一個彈出窗口,您可以在其中選擇「push」作爲segue的類型。接下來,選擇segue並在屬性檢查器中(第四個按鈕,在快照中的旁邊)和「標識符」文本字段中輸入您的segue的唯一標識符,例如serviceSegue

在這一點上,使用跳蚤代碼:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"serviceSegue" sender:nil]; 
} 

而且在你發佈的代碼:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

    if ([[segue identifier] isEqualToString:@"serviceSegue"]) 
     [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]]; 
} 

我不知道你正在嘗試與其他SEGUE做「服務1 「,但如果你想改變TableViewController的視圖,segues不是這樣做的。如果有什麼事情,你應該在didSelectRowAtIndexPath方法做到這一點取決於選擇的行:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (You want to transition to other view controller) 
     [self performSegueWithIdentifier:@"serviceSegue" sender:nil]; 
    else 
     Change your view here. 
} 

我希望這有助於!