2012-11-15 34 views
0

我有一個TableView,它描述了一個代表章節的代表章節的代表書本的書。解除/委託故事板中模態堆棧中的第二個視圖

這個TableView的頂部我有一個導航欄中的按鈕,允許「導航」。

此導航按鈕的目標是允許用戶容易地跳躍到給定章/節,而無需手動滾動(其可以是非常長)。

當按鈕被按下的tableview控制器被稱爲顯示書中的所有可用的章節和當選擇一個章節另一個表的觀點被稱爲當前章節顯示可用的詩句的列表。最後,當選擇該行時,顯示書籍的tablew視圖應該滾動到給定的索引/行。

這樣的想法:從代表書中的tableview我叫章查看,模式和詩句作爲一推了章節查看。

enter image description here

我的問題是,我沒有得到管理的代表和來自第二模態視圖解僱點。

有了1個模態視圖,我做了這樣的事情。

在顯示的VC(視圖控制器)予添加的協議和委託

@protocol ChapitresTableViewControllerDelegate <NSObject> 
- (void)didDismissPresentedViewController; 
@end 

@interface ChapitresTableViewController : UITableViewController 
@property (nonatomic, weak) id <ChapitresTableViewControllerDelegate> delegate; 
@end 

我在didSelectRow

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.delegate didDismissPresentedViewController]; 
} 

在顯示VC我添加以下行

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ChapitresTableViewController *chapitresTableViewController = segue.destinationViewController; 
    chapitresTableViewController.delegate = self; 
} 

當然

-(void)didDismissPresentedViewController 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

這將只是正常工作,如果我想的第一模VC後關閉,但我要的是有後,我在第二次點擊第二個被解僱。好的,我可以在第二個模態VC中編寫協議和內容,但是我如何設法讓代理髮送給第二個VC。

希望我的問題很清楚,要解釋它並不那麼容易。

有人瞭解我,可以幫助我嗎?

注意:我現在知道我不會將任何參數傳遞給代理,我將在稍後執行滾動操作。現在我只是希望能夠關閉第二視圖,然後我會添加所需的東西傳遞參數回委託

回答

1

我相信你能做到這一點,但不是用一個模式視圖控制器導航欄,使用導航控制器不是更容易嗎?然後,您可以使用popToViewController根據需要返回到特定的視圖控制器。您可以通過您想要彈出的各種控制器的UIViewController*,或者通過編程方式完成: How to pop back to specify viewController from navigationController(viewControllers/stack)?

在這種情況下,保留了以前的視圖控制器。你彈出的那些被釋放(就像你放棄的模態那樣),但是你保留的那些被保留下來(就像你在模態世界中保留的那些一樣)。

但是,如果書很大,你必須對內存使用情況很敏感。因此,您可能需要處理didReceiveMemoryWarning以在模式序列或推送序列中釋放先前視圖的模型數據,在這種情況下,您需要在viewDidAppear上查看您的應用是否必須釋放內存以響應到didReceiveMemoryWarning並在這種情況下重新加載它。但是,這是所需的行爲,無論哪種方式,如果需要的話,優雅地釋放頁面(並且在特定視圖重新出現時重新加載它們),但是如果可以的話將其保存在內存中。

最後,您可能還想考慮使用UIPageViewController。鑑於你所描述的,我想先考慮UIPageViewControllerUINavigationController,並推動第二,並使用模態第三。

+1

它工作正常,我的視圖控制器關閉並彈出到我想要的。但是現在我想將信息「發回」給視圖控制器,在我的情況下,發回部分和行以便我可以滾動。我將如何做到這一點。我只看到了「全球變數」,但通常這樣做並不好。只要我彈出的視圖控制器被保留,我可以從堆棧中的另一個控制器修改該視圖控制器的屬性嗎? – HpTerm

+0

你絕對可以。 – Rob

+0

你的回答並不回答如何解除模態堆棧中的第二個視圖的問題。但只要你的答案對我很好,完全滿足了我的需求,我認爲它也適用於其他人。我剛剛完成廣泛測試我的應用程序與您的解決方案,它工作正常。感謝您的快速支持。 – HpTerm

相關問題