2011-11-12 7 views
2

私はジュニアで、これを動作させるのに本当に苦労しています。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]; } 

答えて

1

UIPopoverにNULLではありません、あなたはそれを提示する前にそれを解放する必要はありません。実際、そうすることで致命的な例外が発生します。画面から取り除かれた後、または-deallocに取り込まれた後、公開が行われます。

+0

ありがとうございます。私は[popover release]を削除しましたが、これは問題を解決していないようです。私の問題は、scrollViewがポップオーバーからページ番号を選択した後に水平位置にスクロールしないことです(scrollViewはデバッガでnullを表示します)。 –

+0

あなたはscrollViewをインスタンス化していなくても、ポップオーバーのようにスクロールする前に解放してもよいでしょう。スクロールビューの-contentOffsetプロパティを使用して設定し、メソッドに戻り[[scrollview alloc] init ...]と[scrollview release]を確認します。 – CodaFi

+0

もう一度お手数をおかけします。私はすべてのリリースを削除しましたが、私はまだ同じ問題を抱えていました。だから代わりに私は別のタックを試みた。私はpopoverからテーブルを削除し、ボタンに置​​き換えました。これはうまくいった。 scrollViewは、ボタンに関連付けられた場所に移動します。私はテーブルとそのスクロール者がどうやって問題を引き起こしたかを推測します。これであなたのサポートに感謝します。 –

関連する問題