我正在研究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)都是如此。
感谢任何帮助或指示。如果我能提供更多详细信息,请告诉我。
答案 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 方法。其他事情似乎没问题。