3

redSegmentedControl.m

redSegmentedControl.h

今、私は別のコントローラーにコードを書きます

 // self.segmentedControl = [[redSegmentedControl alloc] initWithFrame:CGRectMake(0, 140, 320, 50)];

self.segmentedControl = [[redSegmentedControl alloc] initWithSectionImages:@[@"list.png", @"list.png", @"list.png"] sectionSelectedImages:@[@"list.png", @"list.png", @"list.png"]];


//[self.segmentedControl setSectionTitles:@[@"List", @"Activity", @"Top Tags"]];

コメント行が削除されている場合は正常に動作しますが、このコードを実行するとエラーが発生します。

-[__NSCFConstantString size]: unrecognized selector sent to instance ...

私が追跡したところ、これらの- (void)updateSegmentsRectsメソッドの行に問題が見つかりました。

 for (UIImage *sectionImage in self.sectionImages) {
            CGFloat imageWidth = sectionImage.size.width + self.segmentEdgeInset.left + self.segmentEdgeInset.right;
            self.segmentWidth = MAX(imageWidth, self.segmentWidth);
        }

ここでは、配列に配置された画像のサイズにアクセスしますが、エラーが発生します。コードを置き換えるか、理由を教えてください。

4

2 に答える 2

6

あなたのクラスはオブジェクトの配列であるとredSegmentedControl想定していますが、上記のコードは を使用してオブジェクトを初期化し、 の配列を渡します。したがって、エラー。sectionImagesUIImageinitWithSectionImagesNSStrings

したがって、おそらく init メソッドの呼び出し元を変更する必要があります。

self.segmentedControl = [[redSegmentedControl alloc]
                         initWithSectionImages:@[[UIImage imageNamed:@"list.png"], ...]];

または、実装を変更して、NSString の配列であるとredSegmentedControl想定するようにします。sectionImagesおそらく前者のオプションの方が優れているため、呼び出し元が画像の作成方法を担当できるため、コントロールはそれを気にする必要はありません。

于 2013-08-17T12:57:48.737 に答える
1

あなたのinitWithSectionImagesメソッドは UIImages の配列を期待していますが、NSStrings の配列を渡しています。また、NSString オブジェクトにはサイズ プロパティがないため、機能しません。

したがって、NSStrings の代わりに UIImages を渡すと、動作するはずです。

于 2013-08-17T12:57:39.753 に答える