2013-05-07 34 views
0

我有打印出不同的PDF的代碼,這取決於選擇哪個表格行。我使用StoryBoards開發了這個功能並使用Segues。我從prepareForSegue開始,並轉向執行SegueWithIdentifier,因爲我需要從一個TableViewController進行幾次循環。我可以:(1)獲取傳遞的行值(整數),但是,webView pdf加載不起作用(使用vc2代碼),或者(2)我可以加載webView pdf,但不傳遞行值performSegueWithIndentifier(所以只有行= 0 pdf加載)。經過一整週的研究和嘗試,我仍然困惑不解。這裏有一些基本的東西我不明白。請幫忙。多個Segue和數字傳遞不起作用

FirstViewController 

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

NSIndexPath *myIndexPath = [self.tableView indexPathForSelectedRow]; 
    int row = [myIndexPath row]; 

if (row == 0){ 
    [self performSegueWithIdentifier:@"showView1" sender:self];} 

    else if (row == 1){ 
     [self performSegueWithIdentifier:@"showView1" sender:self];} 

    else if (row == 2){ 
     [self performSegueWithIdentifier:@"showView2" sender:self];} 

SecondViewController *vc2 = [[SecondViewController alloc]init]; 
vc2.row = row; 
[self.navigationController pushViewController:vc2 animated:YES]; 




SecondViewController 

if (row == 0) { 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"cover" ofType:@"pdf"]; 
     pdfUrl = [NSURL fileURLWithPath:path]; 
     NSLog(@"in SecondView Controller path =: %@", pdfUrl);} 

    else if(row == 1){ 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"welcome" ofType:@"pdf"]; 
     pdfUrl = [NSURL fileURLWithPath:path]; 
     NSLog(@"in SecondView Controller path =: %@", pdfUrl);} 

    [webView loadRequest:[NSURLRequest requestWithURL:pdfUrl]]; 
+0

這不是我清楚你在做什麼試圖做,但在didSelectRowAtIndexPath中執行SegueWithIdentifier和pushViewController很可能是錯誤的。 「showView1」和「showView2」在哪裏(哪些視圖控制器)? – rdelmar 2013-05-07 01:41:04

+0

謝謝。沒有一起使用pSWI和pVC。分別嘗試了兩種方法。每個人都有缺陷。 pVC傳遞了行值並更正了pdf名稱,但webView不會加載PDF。沒有使用pSWI傳輸行值。每次都是一樣的pdf。 ShowView1是SecondViewController的一部分,它將顯示不同的PDF,具體取決於選擇FirstViewController的行值(爲什麼我需要傳遞的行值)。我放入ShowView2是因爲我最終會添加ThirdViewController(現在不是)。任何幫助將不勝感激。 – user2353906 2013-05-07 04:16:06

回答

0

您需要使用prepareForSegue和performSegueWithIdentifier。所以,在performSegueWithIdentifier:發件人:方法,傳遞選定indexPath作爲發件人:

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

    if (indexPath.row < 2) [self performSegueWithIdentifier:@"showView1" sender:indexPath]; 
    if (indexPath.row == 2) [self performSegueWithIdentifier:@"showView2" sender:indexPath]; 
} 

然後,使用prepareForSegue傳遞行的信息:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSIndexPath *)selectedIndexPath { 
    if ([segue.identifier isEqualToString:@"showView1"]) { 
     SecondViewController *vc2 = segue.destinationViewController; 
     vc2.row = selectedIndexPath.row; 
    }else if ([segue.identifier isEqualToString:@"showView2"]) { 
     //do something else 
    } 
} 
+0

謝謝!謝謝!這很完美,並教會了我很多。這是我第一次使用堆棧溢出。我想投票還是評分?你在我的書中獲得AAA +++。 – user2353906 2013-05-07 18:31:00

+0

@ user2353906,您可以投票(如果您被允許,我不知道是否需要一定數量的聲望點才能這樣做),並且您可以通過單擊大空心箭頭接受答案。 – rdelmar 2013-05-07 19:08:01

+0

會做。再一次......謝謝。 – user2353906 2013-05-08 05:25:54