创建UISegmentedControl
然后将其添加到leftBarButtonItem
中的代码。它在viewDidLoad
UISegmentedControl *prevNextSegment = [[UISegmentedControl alloc] init];
[prevNextSegment setImage:[UIImage imageNamed:@"up.png"] forSegmentAtIndex:0];
[prevNextSegment setImage:[UIImage imageNamed:@"down.png"] forSegmentAtIndex:1];
[prevNextSegment addTarget:self action:@selector(prevNextSegmentAction:)
forControlEvents:UIControlEventValueChanged];
prevNextSegment.frame = CGRectMake(0, 0, 95,35);
prevNextSegment.momentary = YES;
self.prevNextSeg_ = prevNextSegment;
[prevNextSegment release], prevNextSegment = nil;
UIBarButtonItem *segmentBarItem = [[ UIBarButtonItem alloc ] initWithCustomView:self.prevNextSeg_ ];
self.navigationItem.leftBarButtonItem = segmentBarItem;
[segmentBarItem release];
访问UISegmentedControl
以禁用该段的另一种方法,请使用以下代码
[self.prevNextSeg_ setEnabled:NO forSegmentAtIndex:0];
这行代码使应用程序崩溃。并得到像这样的例外
2014-08-12 09:31:08.386 FinApp[29694:60b] *** Terminating app due to uncaught exception 'NSRangeException',
reason: '*** - [__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
我不知道如何解决这个问题。我搜索谷歌,但没有得到适合这个问题的解决方案。
答案 0 :(得分:0)
插入一些项目以显示段控件
崩溃的原因:
您在分段控件上没有任何项目。它是空的。首先,你必须在其上插入一些项目。然后尝试访问它。另一方面,崩溃将会发生。
UISegmentedControl *segmentControl = [[UISegmentedControl alloc]initWithItems:@[@"Up",@"Down"]];
if ([segmentControl numberOfSegments]>1) {
[segmentControl setEnabled:NO forSegmentAtIndex:0];
}
如果您想稍后插入项目,请使用此方法。请参阅Apple documentation
– insertSegmentWithImage:atIndex:animated:
– insertSegmentWithTitle:atIndex:animated: