1

ビューを持つ別のクラスを作成し、そのクラスを画面上で呼び出したいと考えています。アプリを実行すると、ビューが表示されません。その構造を削除してメイン ファイルにボタンを作成すると、正常に動作します。別のクラスに置くと機能しません。

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];

}

ありがとう

4

3 に答える 3

0

ビューhomeScreenを割り当てた後、メソッド[fncScreenmyHome]を呼び出すことができます。このような -

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

これがお役に立てば幸いです。

于 2013-02-26T04:25:52.143 に答える
0

あなたのコードに見られる明らかな間違いの1つは、次の行です。

viewHome * fncScreen;

これはポインター宣言ですが、実際にはオブジェクトを作成していません。次のようなものが必要です。

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

次に、そのような初期化されたオブジェクトでメソッドを呼び出すことができます。

于 2013-02-25T21:08:05.263 に答える
0

あるviewControllerのビューをサブビューとして別のviewControllerに追加するのは悪い習慣です。(childViewControllers を持つことができる特定のクラス/メソッドを使用している場合を除きます)。

まさにこの理由で、ビューが表示されない場合と表示される場合があります。

-(UIView*) myHomeviewController.m にメソッドを追加してみてください。

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

ネストされた UIViewControllers に関する良い SO 投稿は次のとおりです。

UIView のように、UIViewController を他の UIViewController 内に「ネスト」するのは賢明ですか?

于 2013-02-25T20:07:53.110 に答える