1

我的 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 都没有效果 - 该段仍然会响应触摸事件。有人知道我需要做什么来禁用某些细分吗?

4

2 回答 2

0

使用isEnabledForSegmentAtIndex:setEnabled:forSegmentAtIndex:UISegmentedControl 的文档中找到。让我知道这是否可以正常工作。

于 2012-05-29T20:53:58.440 回答
0

不确定这对任何人来说是否仍然是一个问题(因为它已在 iOS 6 中修复,但这是我的解决方法(借用另一个问题):

在您的 viewDidLoad 中,尝试:

dispatch_async(dispatch_get_main_queue(),^{
    [self.segmentedControl setEnabled:NO forSegmentAtIndex:2];
});

似乎当视图加载时,外观代理的存在会重置 UISegmentedControl 的其他属性。在主线程上安排这个将重新启用/重新禁用。顺便说一句,这也适用于选择默认段。

于 2013-03-05T03:54:15.093 回答