分段控制总是返回0

时间:2011-04-28 10:44:42

标签: iphone uinavigationcontroller indexing switch-statement uisegmentedcontrol

我正在使用带有导航项的TabBar应用,其中包含UISegmentedControl

当捕捉到“值已更改”事件时,我已连接了一个方法。

该方法总是将0捕获为SegmentIndex ...

这是我的头文件:

#import <UIKit/UIKit.h>


@interface GraphNavController : UINavigationController {

    IBOutlet UIImage *image;
    CGPoint gestureStartPoint;
    UISegmentedControl *segmentedControl;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

-(IBAction) segmentedControlIndexChanged;

-(void)journalier;
-(void)mensuel;
-(void)annuel;


@property (nonatomic, retain) IBOutlet UIImage *image;
@property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl;

@end

方法在这里:

-(IBAction) segmentedControlIndexChanged{

    switch (self.segmentedControl.selectedSegmentIndex) {
        case 0:
            NSLog(@"1");
            break;
        case 1:
            NSLog(@"2");
            break;
        case 2:
            NSLog(@"3");
            break;
        default:
            break;
    }

}

我希望我们能找到解决方案

非常感谢

2 个答案:

答案 0 :(得分:5)

此问题的可能解释是 self.segmentedControl 为零。 self.segmentedControl是IBOutlet吗?或者在代码中创建?检查self.segmentedControl == nil。

答案 1 :(得分:0)

我遇到了同样的问题并且与nill UISegmentedControl的错误作斗争。

我发现了答案。

有时您遇到同样的问题但是您在XIB中拥有所有连接。

问题:你在self.segmentedControl中有nill。 在大多数情况下,当您在XIB中连接所有内容时,它也无法正常工作。

原因:由于研究Objective-C的不同,我们使用不同风格的编写代码。

决定:例如,我们在界面 UISegmentedControl * control; 中编写 当你@synthesize你会怎么做? 如果写的 @synthesize控制= _Control; 你将永远有nill当编写这样的的NSLog(@ “%i” 的,control.selectedSegmentIndex)

所以我们在 @synthesize 或代码中遇到了错误。

决策

你写@synthesize控件的人;使用control.selectedSegmentIndex

你写@synthesize control = _control;使用_control.selectedSegmentIndex

一切都会正常。