2011-12-15 29 views
0

我有以下問題。如何從故事板內的表格視圖調用詳細視圖

我已經創建了一個基於選項卡的應用程序與三個視圖和Viewcontroller。 FirstView(開始屏幕的東西),SecondView(詳細頁面),ThirdView(列表項目表)。 (故事板的連接自動設置)。

在第三個視圖中,整合了一個表格並且內容顯示正常。

現在我想調用SecondView,當表中的一行被選中時。

我也嘗試添加一個第四視圖,tabBar控制器之外,以獲取Detailview,但這也沒有幫助。

我已經嘗試了幾個教程和論壇提示,但無法讓它工作。

該類設置爲正確的ViewController,標識符設置爲detail。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"]; 
[self.navigationController pushViewController:detail animated:YES]; 
detail.label1.text = @"It is working"; 

}

當行點擊,就變成藍色,但沒有任何反應。沒有錯誤消息,沒有。

希望你能幫助:-)


OK,我曾經試圖 「優化」 我的設計。

仍然有基於選項卡的視圖,但是當點擊表格中的一行時,應該會出現一個新的(未在故事板中鏈接)視圖來顯示所選報價的詳細信息。

  1. 我已經建立在故事板的圖,將其稱爲「detailzitat」
  2. 我已經創建了一個DetailViewController.h /米作爲UIViewController類
  3. 我已自定義類設置爲DetailViewController
  4. 我導入ThirdViewController.h中的DetailViewController.h

我相應地修改了ThirdViewController.h中的didSelectRowAtIndexPath方法。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
DetailViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"detailzitat"]; 

[self.navigationController pushViewController:detailVC animated:YES]; 

}

和我DetailViewController.m看起來像

#import "DetailViewController.h" 
@implementation DetailViewController 
@synthesize label1, labeltext; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[email protected]"JUHU"; 
label1.text=labeltext; 
} 

但同樣,沒有任何反應,除了該行獲得藍色。

我不明白。如果我在非故事板項目中使用此代碼,它正在工作。 我在做什麼錯?故事板中是否有這個組合的教程?還沒有找到一個這種方法。 嘗試從網上的不同教程學習,但最大的問題是,大多數不是iOS5的,我不擅長轉移。

希望能得到一些提示:-)

回答

1

你可能想考慮一下你的設計。如果我正確理解你的描述,用戶將在第三個選項卡上,點擊表格中的一行,然後你將切換回第二個選項卡。導航控制器可能是一個更自然,更容易混淆的選擇。

但在任何情況下,這樣的事會工作有時

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    DetailViewController *detailVC = [self.tabBarController.viewControllers objectAtIndex:1]; 

    detailVC.label1.text = @"It is working"; // <- this will not work consistently! 

    self.tabBarController.selectedViewController = detailVC; 

} 

這樣做的問題是,雖然用戶是第三個選項卡上,它可能是第二個選項卡視圖控制器的觀點是卸載(例如由於內存壓力)。

也有可能用戶從標籤1立即到標籤3,因此第二標籤的視圖甚至沒有加載。 (甚至要測試上面的代碼,你必須選擇標籤2然後標籤3.)

如果第二個選項卡的視圖層次結構未加載,label1屬性將爲零,因此這將不起作用。更好的策略是在DetailViewController上創建一個新的類型爲NSString *的@property。並設置屬性,而不是試圖直接設置label1。

然後在您的viewWillAppear:爲DetailViewController您可以根據需要更新您的標籤。當然,您可以確定label1已加載並連接到正確的UILabel。

我希望有幫助。

+0

首先「謝謝」:-)你做了我的一天。好吧,問題是,試圖映射不同的教程來把事情放在一起,我認爲;-))然而,我只是試圖弄清楚,事情是如何工作的。我的應用程序的「方法」如下。有一個報價的應用程序。在「第二視圖」中,您可以獲得隨機報價,並且該視圖被格式化以顯示報價。在「第三視圖」中,您將有一張列出所有報價單的表格。如果你點擊一行,就會出現「DetailView/2nd View」。你有沒有建議更好的解決方案,而不是兩次佈局相同的觀點? – Ssernengreiferin 2011-12-15 06:56:46

0

我認爲問題出在self.navigationController。如果您的視圖不在導航控制器內,則不起作用。所以你要做的是在那裏創建一個新的導航控制器對象,然後用它來顯示你的詳細視圖。

相關問題