私はジュニアで、これを動作させるのに本当に苦労しています。PopoverからScrollViewを制御する際の問題
私は、ポップオーバー内のテーブルから項目を選択することによって(ポップオーバーが残っている間に)別のWebViewをスクロールできるAppを構築しようとしています。残念ながら、Popoverビューから項目を選択すると、scrollViewを動かすことができません。
メインのUIViewControllerでページコントロールを使用してUIScrollViewをセットアップしました。 scrollViewには、(pageViewController)UIWebViewsが設定されています。メインのUIViewControllerにはボタン付きナビゲーションバーがあり、ボタンをクリックするとPopover Viewが作成されます。 Popoverビューのテーブルからアイテムを選択すると、UIScrollViewを特定の位置にスクロールする(選択したページに相当する)が、scrollViewは移動しません。
以下のメソッドは、popoverから選択した値を使用し、ページ番号を使用してscrollViewをどこにスクロールするかを決定しますが、この時点ではscrollViewがNullであるため動作しません。 必要に応じてより多くのコードを提供できます。
メインUIViewController.mコードは:
- (void)setDetailItem:(id)newDetailItem {
if (detailItem != newDetailItem) {
[detailItem release];
detailItem = [newDetailItem retain];
NSString *pgnum = [[NSString alloc] initWithString:[detailItem description]];
int pg;
if(pgnum == @"Page 1"){
pg =1;
}
if(pgnum == @"Page 2"){
pg =2;
}
if(pgnum == @"Page 3"){
pg =3;
}
[pgnum release];
pageControl.currentPage = pg;
[self loadScrollViewWithPage:pg - 1];
[self loadScrollViewWithPage:pg];
[self loadScrollViewWithPage:pg + 1];
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * pg;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
pageControlUsed = YES;
}
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
}
これは私がinfoButtonがナビゲーションバーにあるpopOverController をトリガする方法です。 scrollViewが賢明なメモリ管理を使用するための最も明白なクラス、また最も安定でもない、infoButton
- (void)infoButton:(id)sender {
NSLog(@"Entering: infoButton");
// [self inspectView:self.view level:@""];
if (self.popoverController == nil) {
PopoverViewController *popoverViewController =
[[PopoverViewController alloc]
initWithNibName:@"PopoverViewController"
bundle:[NSBundle mainBundle]];
popoverViewController.navigationItem.title = @"Navigation";
UINavigationController *navController =
[[UINavigationController alloc]
initWithRootViewController:popoverViewController];
UIPopoverController *popover =
[[UIPopoverController alloc]
initWithContentViewController:navController];
popover.delegate = self;
[popoverViewController release];
[navController release];
self.popoverController = popover;
[popover release];
//NSLog(@"User pressed the info button");
}
[self.popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
ありがとうございます。私は[popover release]を削除しましたが、これは問題を解決していないようです。私の問題は、scrollViewがポップオーバーからページ番号を選択した後に水平位置にスクロールしないことです(scrollViewはデバッガでnullを表示します)。 –
あなたはscrollViewをインスタンス化していなくても、ポップオーバーのようにスクロールする前に解放してもよいでしょう。スクロールビューの-contentOffsetプロパティを使用して設定し、メソッドに戻り[[scrollview alloc] init ...]と[scrollview release]を確認します。 – CodaFi
もう一度お手数をおかけします。私はすべてのリリースを削除しましたが、私はまだ同じ問題を抱えていました。だから代わりに私は別のタックを試みた。私はpopoverからテーブルを削除し、ボタンに置き換えました。これはうまくいった。 scrollViewは、ボタンに関連付けられた場所に移動します。私はテーブルとそのスクロール者がどうやって問題を引き起こしたかを推測します。これであなたのサポートに感謝します。 –