2012-03-04 9 views
0

私はiPAD用の写真スライドショーアプリを作っています。私は開いているUIPopoverControllerをポップすることによって、ユーザーが写真を選択できるようにしました。そのポップアップに「完了」というカスタムボタンを追加しました。今ここで不気味なところに来る。ポップアップが初めて起動されると、「完了」ボタンが表示されます。フォトアルバムをクリックすると終了したボタンが消え、メインの写真選択ページに戻るとそこから消えます。スクリーンショットを参照してください。ここでUIPopoverController上のUIBottonが消える

enter image description here

enter image description here

enter image description here

私が使用していたコードです。世界では何が起こっているのですか?私はコードが正しいと思う。

-(IBAction)selectExitingPicture 
{ 
    //Specially for iPAD 
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage]; 

    popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
    [popoverController presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 300.0) 
          inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
          animated:YES]; 

} 


- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    UINavigationItem *ipcNavBarTopItem; 

    NSLog(@"Inside navigationController ..."); 

    // add done button to right side of nav bar 
    doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(saveImages:)]; 

    bar = navigationController.navigationBar; 
    [bar setHidden:NO]; 
    ipcNavBarTopItem = bar.topItem; 
    ipcNavBarTopItem.rightBarButtonItem = doneButton; 

} 

答えて

2

代わりに、独自のトップナビゲーション項目を考え出すの、あなたはviewController変数はUINavigationControllerDelegateメソッドに渡されたから探しているものを入手することができます。また、あなたはたびに画像ピッカー変化のトップビューコントローラを、それを再作成を避けるためにdoneButtonをキャッシュすることができます

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
     animated:(BOOL)animated 
{ 
    if (!doneButton) { 
     doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
         style:UIBarButtonItemStylePlain 
         target:self action:@selector(saveImages:)]; 
    } 

    viewController.navigationItem.rightBarButtonItem = doneButton; 
} 
+0

は、あなたが素晴らしいです、あなたに男をありがとう!私はこの単純なことを過去2日間運が無かったことにしようとしていました。 –

+0

probsはありません。:)あなたのコードについては、悪いことはおそらく、あなたが離れていたView Controllerを修正したことであり、上に来ていたものではありませんでした( 'bar.topItem'は、あなたがそれを要求した)。 'didShowViewController'の変更を処理した場合(' will ... 'ではなく)に動作するはずです。とにかく、この方法はもっと簡単で、仕事をしてくれます。 – ayoy

関連する問題