1

我正在编写 IOS 编程:Big Nerd Ranch 指南第 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)都是这种情况。

任何帮助或方向表示赞赏。如果我可以提供更多详细信息,请告诉我。

4

2 回答 2

3

请做一个

NSLog(@"segmentedControl: %@", segmentedControl);

在添加目标操作之前。您可能正在尝试 addTarget: 到一个 nil 对象。如果您通过 Interface Builder 执行此操作,则 addTarget 应在 -viewDidLoad: 方法中完成。

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

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

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

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

于 2013-10-19T11:32:31.340 回答
1

你说:

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

在初始化程序中,您没有来自 XIB 的 IBOutlets,因此当时 segmentedControl == nil 并且方法调用什么也不做。视图通常在-viewDidLoad方法中配置,其中 IBOutlets 保证从 xib 加载。所以简单地移动

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

-viewDidLoad方法。其他的好像没问题。

于 2013-10-19T11:57:41.807 回答