1

我的應用程序的一部分是筆記部分,有點像iPhone的內置筆記應用程序。用戶在UITableView中敲擊它們的註釋(由NSFetchedResultsController控制),並且UINavigationController顯示註釋。UITableView - 如何從一個項目的視圖直接移動到另一個視圖?

目前,如果用戶想要查看另一個筆記,他們必須回到UITableView並在那裏選擇它。我想要上下箭頭直接進入下一個/上一個音符。

這樣做的最好方法是什麼?我猜我需要返回並從NSFetchedResultsController獲取下一個項目而不顯示UITableView?我如何將它與UINavigationController集成?

+1

爲什麼不把你的筆記的NSManagedObject objectID轉發給音符控制器,並在那裏做一個獲取請求來確定下一個/上一個音符?你提出的方法似乎有點乏味。 – Schoob 2011-05-19 09:45:55

+0

@Schoob我將如何處理UINavigationController?我仍然需要我的後退按鈕去tableView。 – 2011-05-19 16:16:03

回答

0

原來,答案很簡單 - 我根本不需要改變看法。我剛剛使用委託從根視圖控制器獲取了新信息,並更改了當前視圖控制器上的所有屬性。其中一個屬性是NSIndexPath,因此它知道它出現在根視圖的表中的哪個位置。

0

我想出了一個相當混亂的解決方案。它只是關於作品,但我相信肯定會有更優雅和簡單的東西。無論如何,這是我目前的工作。

首先,UITableView是音符的UIViewController的委託。該筆記的UIViewController有一個名爲「editingIndexPath」的屬性,它是UITableView中該筆記的indexPath。當用戶按下「前記」按鈕,下面的方法被稱爲:

- (void)backAction:(id)sender 
{ 
    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:editingIndexPath.row-1 inSection:editingIndexPath.section]; 
    [self.delegate editingViewControllerDidRequestObjectAtIndexPath:newIndexPath];  
} 

然後在tableViewController的委託方法:

- (void)editingViewControllerDidRequestObjectAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.navigationController popViewControllerAnimated:NO]; 

    NoteEditViewController *detailViewController = [[NoteEditViewController alloc] init]; 
    [self.navigationController pushViewController:detailViewController animated:animated]; 

    Note *aNote = [self.fetchedResultsController objectAtIndexPath:indexPath];  
    detailViewController.noteTextView.text = aNote.text; 
    detailViewController.editingIndexPath = indexPath; 
    detailViewController.delegate = self; 
    [detailViewController release]; 
} 

這工作,但它是相當不雅,並始終會導致在一個「流行」動畫中(從右到左),無論是去下一個音符還是前一個音符。我也用一些核心動畫搞砸了,但我相信我錯過了一個更簡單,更好的方法。

相關問題