0

我在 Xcode 5 中为 iOS 7 实现了一个简单的标签和 UIPickerView。我使用了来自以下网站的代码。一切似乎都是正确的。不知道为什么它不起作用。

http://www.youtube.com/watch?v=CIhqiuG8p1k

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    IBOutlet UILabel *label;
    IBOutlet UIPickerView *Picker;
    NSArray *PickerData;
}

@property (retain, nonatomic) IBOutlet UIPickerView *Picker;
@property (retain, nonatomic) NSArray *PickerData;
@end


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize Picker,PickerData;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four", nil];
    self.PickerData = array;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:    (NSInteger)component {
    return [PickerData count];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row  forComponent:(NSInteger)component {
    return [self.PickerData objectAtIndex:row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:  (NSInteger)component {
    int select = row;
    if (select == 0) {
        label.text = @"One Is Selected";
    } else if (select == 1) {
        label.text = @"Two Is Selected";
    } else if (select == 2) {
        label.text = @"Three Is Selected";
    } else if (select == 3) {
        label.text = @"Four Is Selected";
    }
}

@end
4

1 回答 1

2

这里有三个可能的原因,所有相关的:

  1. 选择器视图是否真的存在?您是否已将其添加到定义此类接口的 xib 文件中?
  2. 您的 xib 中的选择器视图是否连接到您的选择器视图 ivar 的插座?在调试这样的问题时检查是否self.PickerView真的指向一个对象总是一个好主意——如果是nil,你可能还没有连接它,你的代码只会默默地丢弃你发送给空 ivar 的消息。
  3. 选择器视图的数据源和委托属性是否连接到您的视图控制器?这就是选择器视图如何知道向谁询问其内容的方式。

另外,作为 Objective-C 风格的旁白:变量、属性和 ivars 按照惯例,名称以小写字母开头,而类和结构以大写字母开头。你不必遵循这个约定,但它会让你的代码更容易被别人阅读,反过来也会帮助你阅读别人的代码。

于 2013-08-13T16:47:58.160 回答