2013-03-13 59 views
2

我創建了一個通用的主 - 細節應用程序。我有一個自定義類(MasterViewController類)內的表視圖。這是一個UITableViewController類。 使用Storyboard,我在iPhone桌面視圖中創建了一個自定義單元格。自定義單元格包含3個標籤和1個圖像。 在StoryBoard中,此表視圖數據源和委託被設置爲MasterViewController類。 我的自定義表格視圖單元格在屬性檢查器的視圖部分中具有「用戶交互已啓用」。 在我的MasterViewController類中,像'numberOfSectionsInTableView'這樣的UITableViewDataSource方法工作正常。 我在表視圖和詳細視圖之間定義了一個seque。 當我運行應用程序並在表格視圖中選擇一個單元格時,didSelectRowAtIndexPath不會爲iPhone調用。我的prepareForSegue方法執行併發生segue。定製單元didSelectRowAtIndexPath不叫

我已閱讀了相當多的didSelectRowAtIndexPath帖子沒有被執行,但我一直無法解決我的問題。

任何提示將非常感激。

我的自定義單元格標識符是ConversationCell。 segue標識符是ShowConversationDetails。 我使用numberOfRowsInSection的第一行上的斷點進行調試,並且此方法從不輸入。

segue工程和詳細視圖顯示我的標籤與'你好'文本。

一些代碼:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section]; 

//NSLog(@"Rows %lu",(unsigned long)[sectionInfo numberOfObjects]); 
return [sectionInfo numberOfObjects]; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

static NSString *CellIdentifier = @"ConversationCell"; 

UITableViewCell *cell = 
[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

[self configureCell:cell atIndexPath:indexPath]; 

return cell; 

} 

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 


    [[self.fetchedResultsController sections] count]); 


    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
    self.detailViewController.detailItem = object; 
} 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"ShowConversationDetails"]) { 

    NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow]; 

    Event *e = nil; 

    e = [self.fetchedResultsController objectAtIndexPath:selectedIndex]; 

    UIViewController *destinationViewController = [segue destinationViewController]; 
    [segue.destinationViewController setLabel:@"Hello"]; 
    } 
} 

MASTERVIEWCONTROLLER: 這是我界面以上;

@interface MasterViewController : UITableViewController  <NSFetchedResultsControllerDelegate,ASIHTTPRequestDelegate,UITableViewDelegate, UITableViewDataSource> 
{ 
NSMutableArray *eventsArray; 

} 

這可能是我的問題的線索。當我添加以下代碼prepareForSeque彷彿當prepareForSeque正在執行的行不再被選中

NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow]; 
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:selectedIndex]; 
    NSString *messageTableID = [[object valueForKey:@"messagetableid"] description]; 

的selectedIndex是空的。

順便說一句,爲了安全起見,我從模擬器中刪除了應用程序,然後在項目上執行了清理並且沒有任何變化。

+1

幾行代碼? – Larme 2013-03-13 17:21:39

+0

那麼好吧,我懷疑你的手機 - 'ConversationCell'有一個頂部的視圖,不會讓觸摸通過它到達表格視圖單元格。如果您正在使用cellforRow,HeightForRowAtIndex等方法,並且您說您在使用DidSelectRowAtIndexPath時遇到問題,那麼它必須歸因於最頂層視圖,它不會讓觸摸傳遞到單元格。你所能做的就是隻需在表格視圖單元格中設置'SetUserInterActionEnabled:NO'到你擁有它的視圖,然後通過點擊行來測試它。不要關閉單元的交互。乾杯。 :) – 2013-03-13 17:42:41

+0

裏諾,謝謝你的提示。我忽略了提及我已取消選中「自定義單元格的每個元素的」User Interaction Enabled「。自定義單元格的交互仍然保持開啓狀態。不幸的是,所有這些,DidSelectRowAtIndexPath不會被調用。 – 2013-03-13 17:48:36

回答

2

除了你已經提到了檢查,在這裏,你可能要考慮一些其他的:

檢查方法正是這個(在信的情況下沒有區別):

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

檢查控制器實現UITableViewDelegate協議

檢查相互作用不工作(變化選擇樣式選項,使細胞發生變化的觸摸事件的顏色)

檢查你沒有任何視圖中是第一個響應並帶走了互動(刪除任何視圖中的細胞進行測試)

嘗試以編程方式允許在桌子上[tableView setAllowsSelection:YES];

+0

謝謝埃裏克。我didSelectRowAtIndexPath是完全一樣的你注意到。我查看了是否在選中我的單元格時會調用didHighlightRowAtIndexPath,但它並未被選中。看起來,雖然我將MasterViewController設置爲委託,但沒有任何UITableViewDelegate方法正在被調用。 – 2013-03-13 17:43:09

+0

然後嘗試以編程方式在viewDidLoad中設置委託,只是爲了安全起見(tableView.delegate = self;) – David 2013-03-13 17:52:24

+0

謝謝埃裏克。我早些時候嘗試過,存在同樣的問題。我添加了一些我在prepareForSegue中試過的代碼,並注意到我無法確定所選的行。就好像該行在到達prepareForSeque時不再被選中。我需要確定選擇的行內容,以便將適當的值傳遞給詳細信息頁面。 – 2013-03-13 18:00:27

0

選擇你確定你的UITableViewDelegate對象正確地被設置爲表視圖的delegate? (這與將其設置爲數據源分開)

+0

感謝您的反饋。 MasterViewController設置爲dataSource和Delegate。 – 2013-03-13 17:39:30

0

我最終刪除了我的MasterViewController和DetailViewController。我重新創建了它們,現在正在運行。不知道我第一次做錯了什麼。感謝提供建議的每個人。 Tim

相關問題