2013-02-25 53 views
1

我想創建一個具有視圖的不同類並在屏幕上調用該類。 當我運行應用程序時,視圖不會出現。如果我刪除該結構並在主文件上創建按鈕,它可以正常工作。當我把它放在不同的課堂上時,它不起作用。如何在不同的類中創建界面(UIView)並在屏幕上添加

MyView.h

#import <UIKit/UIKit.h> 

@interface viewHome : UIViewController 

-(UIView*) myHome; 

@end 

MyView.m(創建用於測試按鈕)

#import "viewHome.h" 

@implementation viewHome 

-(UIView*) myHome { 
    UIView * myScreen = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    myScreen.backgroundColor = [UIColor whiteColor]; 

    UIButton * myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    myButton.frame = CGRectMake(100,100,100,44); 
    [myButton setTitle:@"Login" forState:UIControlStateNormal]; 

    [myScreen addSubview:myButton]; 

    return myScreen; 
} 
@end 

viewController.m [...]

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    viewHome * fncScreen; 
    UIView * homeScreen = [fncScreen myHome]; 
    [self.view addSubview:homeScreen]; 

} 

由於

其中的

回答

0

將一個viewController的視圖作爲子視圖添加到另一個視圖控制器的不良做法。 (除非你使用特定的類/方法讓你有childViewControllers)。

正是因爲這個原因,您的視圖不會出現在一種情況下,而出現在另一種情況下。

嘗試添加在你viewController.m的-(UIView*) myHome方法,並做了

[self.view addsubview: [self myHome]]; 

這裏是一個很好的SO張貼關於嵌套UIViewControllers:

Is it wise to "nest" UIViewControllers inside other UIViewControllers like you would UIViews?

0

一個明顯的錯誤,我在看你的代碼是這一行:

viewHome * fncScreen; 

好的,這是一個指針聲明,但是實際上並沒有創建該對象。 你需要的東西是這樣的:

viewHome * fncScreen = [[viewHome alloc] init]; 

然後,你可以這樣調用初始化對象的方法。

0

您可以在分配您的視圖homeScreen後調用方法[fncScreen myHome]。 這樣的 -

UIView *homeScreen = [[UIView alloc] init]; 
homeScreen = [funScreen myHome]; 
[self.view addSubView: homeScreen]; 
[homeScreen release]; 

希望這會幫助你。

+0

這就是我寫的:)順便說一句,他可能不會需要你的代碼片段的最後一行,實際上它甚至會拋出一個錯誤。 ARC是過去兩年的默認選項! – 2013-02-26 15:20:10

+0

@IvanKovacevic ...大聲笑... – yunas 2013-02-26 16:03:46