现在,我在另一个控制器中编写代码
// 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"]];
Run Code Online (Sandbox Code Playgroud)
如果删除了注释行,它可以正常工作,但如果运行此代码,则会出错.
-[__NSCFConstantString size]: unrecognized selector sent to instance ...
Run Code Online (Sandbox Code Playgroud)
我跟踪了,我在- (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);
}
Run Code Online (Sandbox Code Playgroud)
在这里,它访问放入数组的图像的大小,但给出错误,任何人都可以替换代码或告诉我原因.
你的redSegmentedControl类期望sectionImages是一个UIImage对象数组,但是上面的代码初始化对象使用initWithSectionImages它传递一个数组NSStrings.因此错误.
所以大概你想改变init方法的调用者:
self.segmentedControl = [[redSegmentedControl alloc]
initWithSectionImages:@[[UIImage imageNamed:@"list.png"], ...]];
Run Code Online (Sandbox Code Playgroud)
或者更改redSegmentedControl实现,以便它确实sectionImages是一个NSStrings数组.可能前一个选项会更好,因此调用者可以负责如何创建图像,控件不应该关心它.
| 归档时间: |
|
| 查看次数: |
7999 次 |
| 最近记录: |