UISegmentedControl不会触发UIControlEventValueChanged

时间:2013-10-19 11:15:25

标签: ios uisegmentedcontrol

我正在研究IOS编程:大书呆子牧场指南第5章银色挑战,我正在试图勾结UISegmentedControl的变更事件。

Controller.m的初始化程序包含:

[segmentedControl addTarget:self
    action:@selector(onChangeSegment:)
    forControlEvents:UIControlEventValueChanged];

Controller.m还包含:

- (void) onChangeSegment:(id)sender
{
    NSLog(@"Phew made it!");
}

Controller.h包含:

@interface
//...

- (void) onChangeSegment:(id)sender;
@end

所有似乎都已就位,但是当从UI更改活动段时,onChangeSegment永远不会被消息。无论是模拟器还是我的iPhone4S(IOS7和XCode 5)都是如此。

感谢任何帮助或指示。如果我能提供更多详细信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

请做一个

NSLog(@"segmentedControl: %@", segmentedControl);
在添加目标操作之前

。你有可能尝试addTarget:到一个零对象。如果你是通过Interface Builder这样做的,那么addTarget应该在-viewDidLoad:方法中完成。

我在示例应用中所做的是:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.segmentedControl addTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];
}

-(void)change:(UISegmentedControl *)control{
    NSLog(@"changed!");
}

分段控件是使用IB创建的,并链接到视图控制器的标题。

答案 1 :(得分:1)

你说:

  

Controller.m的初始化程序包含:

在初始化程序中,您没有来自XIB的IBOutlet,因此当时segmentedControl == nil,方法调用不执行任何操作。视图通常在 -viewDidLoad 方法中配置,其中IBOutlet保证从xib加载。所以简单地移动

[segmentedControl addTarget:self
action:@selector(onChangeSegment:)
forControlEvents:UIControlEventValueChanged];

-viewDidLoad 方法。其他事情似乎没问题。