2012-03-04 33 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天裏完成這個簡單的事情,但沒有運氣。 – 2012-03-04 17:55:18

+0

沒有probs,歡迎您:)關於您的代碼的壞處可能是您修改了視圖控制器,它正在消失,而不是最後一個('bar.topItem'沒有在當時更新你要求它)。如果你在'didShowViewController'(而不是'will ...')中處理了更改,它應該可以工作。無論如何,這種方式似乎更簡單,並完成這項工作。 – ayoy 2012-03-04 20:27:06