2011-03-06 46 views
2

我開始一個多視圖應用程序與兩個意見:新遊戲和玩家。我以爲我正在設置一切,但顯然不是。Xcode錯誤:不兼容的Objective-C類型。預期'結構UIView'

MainViewController.h

#import <UIKit/UIKit.h> 

@class NewGame; @class Players; 

@interface MainViewController : UIViewController { 
    IBOutlet NewGame *newGameController; 
    IBOutlet Players *playersController; 
} 

-(IBAction) loadNewGame:(id)sender; 
-(IBAction) loadPlayers:(id)sender; 

-(void) clearView; 

@end 

MainViewController.m

#import "MainViewController.h" 
#import "NewGame.h" 
#import "Players.h" 

@implementation MainViewController 

-(IBAction) loadNewGame:(id)sender { 
    [self clearView]; 
    [self.view insertSubview:newGameController atIndex:0]; 
} 

-(IBAction) loadPlayers:(id)sender { 
    [self clearView]; 
    [self.view insertSubview:playersController atIndex:0]; 
} 

-(void) clearView { 
    if (newGameController.view.superview) { 
     [newGameController.view removeFromSuperview]; 
    } else if (playersController.view.superview) { 
     [playersController.view removeFromSuperview]; 
    } 
} 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [self loadNewGame:nil]; 
    [super viewDidLoad]; 
} 

一對夫婦的圖像...

http://i.stack.imgur.com/GwXMa.png HTTP://i.stack.imgur .com/XHktH.png

+2

代碼塊每行用四個空格表示,而不是'>'。 http://stackoverflow.com/editing-help – BoltClock 2011-03-06 02:23:48

回答

1

視圖是表示屏幕上顯示內容的對象。 視圖控制器是執行與這些視圖相關的應用程序邏輯的對象。 A 視圖層次結構是視圖的集合。您正試圖將視圖控制器添加到視圖層次結構中,就好像它實際上是視圖一樣。

粗略地說,你應該爲你的應用程序的每個「屏幕」都有一個視圖控制器。該視圖控制器可以管理任意數量的視圖。其主要景觀可通過其view酒店進入。

讓應用程序正常運行的一個快速解決方法是添加視圖控制器的主視圖,而不是視圖控制器本身。因此,舉例來說,這樣的:

[self.view insertSubview:playersController atIndex:0]; 

...會變成這樣:

[self.view insertSubview:playersController.view atIndex:0]; 

說了這麼多,這不是一個很好的解決方案的長期,你應該調查更結構化的方式組織從視圖控制器到視圖控制器的轉換。 UINavigationController對初學者來說是一個不錯的選擇。

+0

是啊...我錯過了控制器的.view。謝謝。 – 2011-03-06 16:50:44

+0

新的在這裏。擊中回報並提交評論。哈。並且我更加有條理地欣賞提示。我絕對是一個初學者。 – 2011-03-06 16:51:34

+0

吉姆 - 我決定不使用多個視圖控制器,並使用一個視圖控制器和多個視圖。我知道如何加載視圖,但我怎樣才能清除它們?該代碼正在執行,以正確插入Subview,但由於已經有一個視圖沒有任何反應。 – 2011-03-08 19:23:30

0

我想playerController是視圖控制器。然後加入

[self.view addSubview: playerController.view]; 

如果還是不行則繼承他們的UIView

0

NewGame和玩家都需要繼承的UIView。如果他們是ViewControllers,而不是UIViews,則需要使用newGameController.view而不是newGameController。