1

私はviewBasedアプリケーションを使用して本のようなアプリケーションを実行しています。mainViewは、ページをロードするためのbackgroundViewとして機能します。各ページは異なるビューであり、独自のペン先があります。ページ(実際には現在のビュー/ページをロードしたmainView)をスワイプすると、そのページが削除され、次/前のページが追加されます。

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

このmainViewにバーボタン付きのpopoverControllerを追加しました。popClassという名前のtableviewControllerクラスで初期化されました。PopClassは、popViewControllerの親として機能する別のUITableViewControllerクラスです。

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

ポップオーバーで特定の行を選択するときに、backgroundview(mainView)がその行の番号に対応するページをロードするようにします。

そのために、bookView(mainView)Controllerクラスで関数を作成しました。そして、特定の行を選択すると、popOverの親クラスからそれを呼び出しています。

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

関数とコード行は実行されていますが、何も起きていません。ログ行も印刷されますが、アクションは実行されません。コードは、ページを削除したり、ビュー/ページをスワイプしたときに正常に機能する別のページを追加したりする場合と同じです。

何が問題ですか?または、ポップオーバーを使用してmainViewでビューを変更する他の方法はありますか?

4

2 に答える 2

4

ポップオーバーコントローラーでバックグラウンドビューコントローラーを参照する必要があります。

コントローラではPopController、次のような遅延が必要です。

@interface PopController: UITablViewController{

  //// other varibales;
      id delegate;
}

@property (nonatomic, retain) id delgate;

これで、popovercontrollerを表示しているクラスから

次の行を追加する必要があります。

[myPopController setDelegate:self];

次に、メインビューコントローラクラスの任意のメソッドに簡単にアクセスできます。を使用して

[delegate callTheRequiredMethod];

お役に立てれば。

ありがとう、

マッドハップ

于 2010-05-02T13:03:59.040 に答える
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]`
于 2010-04-27T10:35:52.687 に答える