2012-11-28 60 views
1

我正在做一個Ipad應用程序。現在我有2個viewcontroller,ViewController有一個button1,它有一個popover到第二個viewcontroller(PopoverController)。然後,PopoverController有一個button2,如果我點擊button2,我會從我的服務器收到一些UIImage。我想添加幾個UIImageView的子視圖到ViewController來顯示這些圖像,如果我點擊button2。如何將子視圖添加到其他視圖控制器?

button1工作正常,PopoverController可以按預期彈出。但是當我點擊button2時,什麼都沒有發生。我想知道如何在兩個視圖控制器之間傳遞數據以及如何將子視圖添加到另一個視圖控制器。

關於我的問題的一些代碼:

ViewController.h:

#import <UIKit/UIKit.h> 

@class PopoverController; 

@interface ViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIButton *button1; 
@property (strong, nonatomic) PopoverController *popoverController; 

@end 

PopoverController.h:

#import <UIKit/UIKit.h> 

@class ViewController; 

@interface PopoverController : UIViewController 
@property (strong, nonatomic) IBOutlet UIButton *button2; 
@property (strong, nonatomic) UIImage *tempImg; 
@property (strong, nonatomic) ViewController *viewController; 

- (IBAction)addsubviews:(id)sender; 

@end 

我不能只使用[viewController.view addSubview:img1];- (IBAction)addsubviews:(id)sender;方法addsubview。所以有人可以幫助我? :)

==== 1日更新====

有人建議我必須使用- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法。我已經通過控制點擊了button2並在button2和ViewController之間創建了一個自定義的segue。當我點擊button2時,它顯示: Terminating app due to uncaught exception 'NSGenericException', reason: 'Could not find a navigation controller for segue 'change'. Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

所以我想知道我是否應該添加一個NavigationController。如果是這樣,我該怎麼辦?

====月2日更新====

我用Paramasivan的代碼,現在,我發現從另一個視圖控制器調用方法的方式。現在的問題是我的viewcontroller中新添加的子視圖沒有顯示出來。我想我必須更新我的viewcontroller才能看到它。

在我- (IBAction)addsubviews:(id)sender;方法,我通過[self.viewController createSubViewWithImage:_tempImg];

因此該方法可以當我點擊按鈕2調用調用在視圖控制器的方法,但是視圖控制器的觀點已經沒有什麼改變。

+1

你的問題到底是什麼? 「我不能只用[..]」 - 爲什麼? – jimpic

+0

當您使用該行時,您遇到了什麼問題? – iDev

+0

@jimpic對不起,我的意思是這行代碼可以編譯,但沒有做我期望的 – Manted

回答

1

- (void)viewDidLoad添加這個,

self.popoverController = [[PopoverController alloc] init]; 
self.popoverController.viewController = self; 

確保在任何其他地方,你設置self.popoverController = ...

popovercontroller類中添加像self.viewController = ...東西。你也不需要做self.viewController.popoverController = self;。如果您已經擁有它,請刪除這些行。

完成這些後,請確保僅在彈出框中顯示self.popoverController,並且您沒有爲popoverController類創建新對象。所以如果這些都很好,你可以使用任何你想要的方法將圖像從popoverController類傳遞到viewController類。

正如您在評論中提到的,您可以在popovercontroller類中使用[self.viewController createSubViewWithImage:_tempImg];

更新: 如果您通過故事板做的,你需要設置在prepareForSegue方法和你沒有創建self.popoverController可言。刪除你的案件中的那部分。您可以按照此處提到的步驟來設置自定義的Segue並實施prepareForSegue方法來傳遞對象。來源:On storyboards, views and passing data along

  1. 在故事板設置賽格瑞的名稱爲「CustomSegue」
  2. 實現prepareForSegue方法
  3. 裏面的方法,檢查是否賽格瑞的名稱相匹配「CustomSegue」,然後設置viewControllerpopoverController對象那裏,

嘗試,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"CustomSegue"]) { 
     PopoverController *popoverController = [segue destinationViewController]; 
     popoverController.viewController = self; 
    } 
} 

做完這些之後,您需要在popoverController課程中致電[self.viewController createSubViewWithImage:_tempImg];

+0

如果我在我的'PopoverController'中刪除了這些行,我現在無法調用' - (void)createSubViewWithImage:(UIImage *)imageDownloaded'方法。 – Manted

+0

@管理,什麼是錯誤?因爲如果你使用它,你正在創建viewController的新實例,與前一個對象不一樣。另外你怎麼顯示popover?使用代碼或通過故事板?問題是你需要將它設置爲你彈出的同一個對象。但是你展示了一個不同的popover對象。 – iDev

+0

我只是控制點擊按鈕1並拖動到PopoverController,並使用popover賽格。這可以嗎? – Manted

0

您可以使用下面的方法傳遞數據:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ViewController2"]) 
    { 
     ViewController2 *v2VC = [segue destinationViewController]; 
     v2VC.yourData = self.someStuff; 
    } 
} 
+0

所以我必須控制點擊button2來創建一個新的自定義賽格?我試過這個,然後我得到了以下錯誤:'終止應用程序,由於未捕獲的異常'NSGenericException',原因:'無法找到導航控制器for segue'更改'。只有在源控制器由UINavigationController實例管理時,才能使用推塞網。「' – Manted

1

在ViewController.h添加以下

-(void)createSubViewWithImage:(UIImage *)imageDownloaded { 
    UIImageView *imageViewTemp = [[UIImageView alloc] initWithImage:imageDownloaded]; 
    [self.view addSubView:imageViewTemp]; 
} 

在PopoverController.h添加以下

@property (nonatomic, retain) ViewController *viewControllerPassed; 

並下載圖像後,請致電PopoverController以下。^ h

[viewControllerPassed createSubViewWithImage:imageDownloaded]; 
+0

仍然沒有發生。 'viewControllerPassed'這裏和我的'ViewController'是一樣的嗎? – Manted

+0

嗨,我現在可以調用此方法,但問題是新添加的子視圖不顯示。我是否需要更新viewcontroller才能顯示它?如果是的話,該如何實施?歡呼 – Manted

相關問題