我的iPad应用程序中有一个UISegmentedControl,我使用iOS5中提供的新方法进行了自定义,如下所示:
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:17], UITextAttributeFont,
[UIColor colorWithRed:0.3 green:0.34 blue:0.42 alpha:1], UITextAttributeTextColor,
[UIColor whiteColor], UITextAttributeTextShadowColor,
CGSizeMake(0, 1), UITextAttributeTextShadowOffset, nil];
[[UISegmentedControl appearance] setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
它看起来很好并且工作正常,但是在调用setEnabled时出现问题:任何段上的NO都没有效果 - 该段仍将响应触摸事件。有人知道我需要做些什么来禁用某些段吗?
答案 0 :(得分:0)
使用documentation for UISegmentedControl中的isEnabledForSegmentAtIndex:
和setEnabled:forSegmentAtIndex:
。如果能让它发挥作用,请告诉我。
答案 1 :(得分:0)
不确定这对任何人来说是否仍然是一个问题(因为它已在iOS 6中修复,但这是我工作的解决方法(借用另一个问题):
在viewDidLoad中,尝试:
dispatch_async(dispatch_get_main_queue(),^{
[self.segmentedControl setEnabled:NO forSegmentAtIndex:2];
});
似乎加载视图时,外观代理的存在会重置UISegmentedControl的其他属性。在主线程上安排此操作将重新启用/重新禁用。这也是BTW用于选择默认段。