2010-04-27 39 views
1

我正在做一個有點使用viewBased應用程序的書。 mainView充當加載頁面的backgroundView。每個頁面都是不同的視圖,並有自己的筆尖。當我在頁面上滑動(實際上在加載當前視圖/頁面的mainView上)時,該頁面將被刪除,並且下一個/上一頁將被添加。代碼正在執行,但在調用窗體函數時視圖不會被加載?

[currentPage.view removeFromSuperview]; 
[self.view insertSubview:nextPage.view atIndex:0]; 

我在這個mainView中添加了一個帶有barbutton的popoverController。它的初始化是一個名爲popClass的tableviewController類。 PopClass是另一個UITableViewController類,它將作爲popViewController的父類。

self.myPopController = [[PopController alloc] initWithStyle:UITableViewStylePlain]; 
self.myPopOverController = [[UIPopoverController alloc] initWithContentViewController:myPopController]; 

當我在彈出窗口中選擇某個行時,我想讓backgroundview(mainView)加載對應於該行數的頁面。

爲此,我在bookView(mainView)控制器類中編寫了一個函數。當我選擇某一行時,從popOver的父類中調用它。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSInteger toPageNumber = indexPath.row + 1; 
[viewController changeToPage:toPageNumber]; 
} 

功能和代碼行正在執行,但沒有任何事情發生。即使是日誌行被打印,但沒有行動發生。代碼與刪除頁面和添加另一個成功工作的頁面時相同,當我滑動視圖/頁面時。

什麼問題? OR有沒有其他方法可以通過使用彈出窗口來在mainView中改變視圖?

回答

4

您必須在酥料餅控制器後臺視圖控制器的refernce。

PopController控制器,你應該有一個像delagate:

@interface PopController: UITablViewController{ 

    //// other varibales; 
     id delegate; 
} 

@property (nonatomic, retain) id delgate; 
從類

現在,您在其中顯示popovercontroller

你應該加入這一行:

[myPopController setDelegate:self]; 

然後,您可以輕鬆訪問主視圖控制器類的任何方法。通過使用

[delegate callTheRequiredMethod]; 

希望這會有所幫助。

感謝,

Madhup

+0

這一個給我警告,當我嘗試[代表callTheRequiredMethod]。說那個callTheRequiredMethod找不到。但我在那裏。 – dombesz 2010-08-02 08:58:57

+0

@dombesz:你是否在.h文件中聲明瞭原型。如果您已經添加了,那麼只需將類型轉換添加到委託變量中。 – 2010-08-02 10:02:10

1

如果不查看代碼,很難分辨出什麼問題。這就是說,這裏是我會怎麼做:

(1)mainView選擇了行,呈現popoverController模態:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    PopoverViewController *vc = [[PopoverViewController alloc] init]; 
    [self.navigationController presentModalViewController:vc animated:YES];   
    [vc release]; 
} 

(2)當事情在popoverController改變,例如行被選擇時,設置在parentViewController的值(這應該是MainView):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.parentViewController.value = someValue; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

(3)駁回調用popoverController哪裏,無論你選擇:

[self dismissModalViewControllerAnimated:YES]` 
+0

我已編輯的代碼並添加細節。你能通過嗎? – wolverine 2010-04-27 10:58:45

+1

我不會像那樣引用parentViewController。相反,我會使用委託模式或通知系統。這樣,這些類更加可重用和鬆散耦合。 – Rengers 2010-04-27 11:02:03

+0

爲了達到同樣的目的,我在示例應用程序的早期使用了委託,並生成了相同的結果。這就是爲什麼我付出了艱辛的努力。我會在這個應用程序中嘗試它,並檢查它是否正常工作。 – wolverine 2010-04-27 11:09:05

相關問題