2012-04-21 221 views
8

我正在嘗試做一些非常簡單的操作:設置一個segue,以便當您單擊表格中的某個單元格時,它將帶您到另一個View Controller。我相信這個問題起源於這些單元格所在的TableView嵌入在常規ViewController中(而不是TableViewController)的事實,並且是此ViewController中的兩個子視圖之一。表格單元格不工作

據我所知,我已經正確設置了一切:我將ViewController與兩個子視圖一起嵌入到Navigation Contoller中,將其設置爲TableView的dataSource和delegate,並創建了一個push segue一個TableViewCell到故事板中的第二個視圖控制器。但是,當應用程序運行並且用戶單擊表中的某一行時,它僅僅選擇該行並且該segue根本不會觸發(我調試過它並且prepareForSegue函數甚至沒有被調用)。

有什麼我在這裏失蹤?或者,如果TableView不是其視圖控制器中的唯一視圖,那麼出於某種原因,這是不可能的?

+0

你給了表格單元格的唯一標識符 – 2012-04-21 21:50:29

+0

我給在故事板(在原型單元格的屬性中)和cellForRowAtIndexPath函數中標識「LoadCell」標識符;這是正確的,還是每個單獨的單元格在創建時都應該被賦予一個獨特的標識符? – generaltsow 2012-04-22 00:33:01

回答

2

如果要創建在Xcode故事板,然後進行以下操作:

  1. 創建一個UITableViewController
  2. 添加原型的UITableViewCell
  3. 創建的UIViewController,這將是你的目標賽格瑞。
  4. Control-單擊原型UITableViewCell並拖動到segue目標。

就是這樣。你可能想要編輯UITableViewCell的特性,例如,你的UITableViewCell的子類。

+2

這正是我所做的,除了不是有一個UITableViewController我有一個普通的UIViewController,UITableView(以及另一個UIView)作爲主視圖中的子視圖。它仍然不起作用。 – generaltsow 2012-04-22 00:25:40

+0

在Xcode中,tableViewCell「推」故事板segue是否與您的segue目標控制器相關聯? – GoZoner 2012-04-22 00:50:16

+0

當然可以。 – generaltsow 2012-04-22 00:57:01

4

這可能會也可能不會幫助你,但我遇到了這個問題,因爲我定義了兩種不同的單元格類型,並提供了實現。我必須添加[self performSegueWithIdentifier:@"Whatever" sender:self]作爲didSelectRowAtIndexPath的一部分,問題已解決。

如果您至少能夠檢測到行選擇,則可以利用此方法。

+0

這解決了我的問題,但與發件人作爲單元格:'發件人:[self.tableView cellForRowAtIndexPath:indexPath]' – brasskazoo 2013-12-01 05:48:55

4

如果自定義單元格渲染,例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

然後確保你使用的是同一小區標識符作爲在STE故事原型細胞中指定。

因此,在這種情況下,連接segue的單元格的「標識符」應設置爲'單元格'。

+0

花了過去兩個小時試圖弄清楚這一點(只是開始搞亂Objective-C今天晚上,非常感謝,這讓我很生氣! – 2014-04-18 23:59:48

+0

這就是答案,謝謝。 – 2014-09-02 19:00:51

4

我發現如果我最近連接了單元的附件視圖中的segue,並且稍後刪除了segue並嘗試將新的segue直接連接到單元,它確實不會工作(使用Xcode 4.6.2) - - Xcode不斷將segue連接到附件視圖(即使沒有一個)!我固定它的方式是通過選擇IB中的單元格並使用連接檢查器(1)刪除原始的「輔助動作」segue,並(2)通過從下面的圖像中的實心圓拖拽直接連接「選擇」到適當的目標視圖控制器。

enter image description here

+0

你是對的。這就是發生了什麼。 – 2016-10-23 06:41:11

+0

仍然與Xcode 8相關:) 非常感謝。解決了我的問題 – gutte 2016-11-22 21:25:48

-1

有同樣的問題。從常規視圖控制器內部的原型表格視圖單元中搜索會導致應用程序崩潰。如果有人有同樣的問題。

我的解決辦法:

如果您使用的是推賽格瑞確保與表視圖您的第一個視圖控制器嵌入導航控制器,否則「推塞格斯」不會工作。同時將segue指向目標View Controller,而不是其導航控制器!

如前所述,確保你的「segue標識符」是正確的。

在 「didSelectRowAtIndexPath方法」 我稱之爲 「[自我performSegueWithIdentifier:@」 Your_destination_View_Controller」發件人:自我];

+0

添加performSegueWithIdentifier使我的應用程序崩潰,在 - [UITableViewCell _setHostsLayoutEngine:]中拋出Assertion失敗。顯然沒有人有過/解決過這個問題,因爲在這裏沒有答案。 – 2015-02-13 22:06:06

0

我有類似的問題 修復是 在故事板 2 SEGUE 1.寫SegueIdentifier。添加以下行[自performSegueWithIdentifier:@「SegueIdentifier」發件人:無];?在didSelectRowAtIndexPath方法

我希望這將有助於

+0

爲我工作。謝謝! – kalan 2014-07-02 08:28:08

+0

添加performSegueWithIdentifier會導致我的應用崩潰,並在 - [UITableViewCell _setHostsLayoutEngine:]中拋出Assertion失敗。顯然沒有人有過/解決過這個問題,因爲在這裏沒有答案。 – 2015-02-13 22:05:21

相關問題