0

入力に応じてUIView動的な数のオブジェクトを表示するカスタム クラスを作成したいと考えています。UISegmentedControlたとえば、クライアントのカートに 5 つの製品がある場合、 は 5 つのオブジェクトをUIView生成UISegmentedControlし、それを各アイテムにリンクします。

私が抱えている問題は、これを で動作させることUIViewです。これが私がこれまでに行ったことです。UISegmentedControlオブジェクトを正常に作成し、プログラムで main 内に表示できますUIViewControllerUIViewクラスに追加しても表示されません。UIViewクラスの実装コードは次のとおりです。

#import "ajdSegmentView.h"

@implementation ajdSegmentView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        NSArray *itemArray = [NSArray arrayWithObjects:@"Yes", @"No", nil];

        UISegmentedControl *button = [[UISegmentedControl alloc] initWithItems:itemArray];
        button.frame = CGRectMake(35,44, 120,44);
        button.segmentedControlStyle = UISegmentedControlStylePlain;
        button.selectedSegmentIndex = 1;

        [self addSubview:button];
    }
    return self;
}
@end

UIViewStoryboard で新しいオブジェクトを作成し、UIViewControllerシーン内に配置しました。クラスをジェネリックUIViewクラスから新しいカスタム クラスに設定したことを確認しました。クラスUIViewにコンセントを追加しました。UIViewControllerの実装内のコードは次のUIViewControllerとおりです。

#import "ajdViewController.h"

@interface ajdViewController ()

@end

@implementation ajdViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.segmentView = [[ajdSegmentView alloc] init];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

それが私が試したすべてです。私は多くのページを検索し、ここで質問せずにこれを実装しようとしましたが、間違った場所を探しているようです.

4

2 に答える 2

1

UIVIewまず、ajdSegmentView がorであることを確認する必要がありますUIViewController。であればいいですUIView。UIViewController のタイプの場合は、Segment を追加するときにこの行を追加する必要があります。

[self.view addSubview:button];

代わりに:

[self addSubview:button];

もう1つ、割り当て後にこのビューをメインに追加するのを忘れているため、次のように宣言できます。

objajdSegmentView = [[ajdSegmentView alloc] init];
[self.view addSubview:objajdSegmentView.view];

私はちょうどこのことを追加しました。私はこのように結果を得ました。ここに画像の説明を入力

これがうまくいくことを願っています。

于 2013-01-19T20:17:15.757 に答える
0

メソッドを使用してカスタム ビューを初期init化していますが、ajdSegmentView の初期化はinitWithFrame:メソッド内にあります (この場合は呼び出されません)。

したがって、次のように置き換えます。

self.segmentView = [[ajdSegmentView alloc] init];

と:

// Change the frame to what you want
self.segmentView = [[ajdSegmentView alloc] initWithFrame:CGRectMake(0,0,100,40)];

また、View Controller のビューにもビューを追加することを忘れないでください。

[self.view addSubview:self.segmentView];

initWithCoder:このビューがインターフェイス ビルダーで作成されている場合を除き、その場合はajdSegmentView クラスでオーバーライドする必要があります。

私はストーリーボードに慣れていないので、何かが足りないかもしれませんが、標準的なシナリオでは、上記で述べたことで問題が解決します。

于 2013-01-19T19:55:12.397 に答える