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类期望sectionImages是一个UIImage对象数组,但是您上面初始化对象的代码使用initWithSectionImages传递给它一个NSStrings. 因此错误。

所以大概你想改变 init 方法的调用者:

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

或者更改redSegmentedControl实现,使其确实期望sectionImages成为一个 NSStrings 数组。可能前一个选项会更好,因此调用者可以负责如何创建图像,控件不必关心这一点。

于 2013-08-17T12:57:48.737 回答
1

您的initWithSectionImages方法需要一个 UIImages 数组,但您正在传递一个 NSStrings 数组。而且由于 NSString 对象没有 size 属性,所以它不起作用。

所以通过 UIImages 而不是 NSStrings 它应该可以工作。

于 2013-08-17T12:57:39.753 回答