所以我有一个弹出的选择器而不是键盘,但是当您滚动到选择器上的不同点时它不会更改值。我通过显示警报显示选择的年龄来测试这一点,并且它与第一个选项相比永远不会改变。我认为警报已损坏,但选择器中当前所选选项上的蓝色选择器轮廓也没有显示。这是选择器和警报的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *array = [[NSArray alloc] initWithObjects:@"18-29",@"30-39",@"40-49",@"50-59",@"60+",nil];
self.pickerData = array;
}
-(IBAction)UITextFieldEditingDidBegin
{
UIPickerView *picker = [[UIPickerView alloc]
initWithFrame:CGRectMake(0, 244, 320, 270)];
picker.delegate = self;
picker.dataSource = self;
[self.view addSubview:picker];
[picker release];
}
-(IBAction)donePressed
{
NSInteger row = [agePicker selectedRowInComponent:0];
NSString *selected = [pickerData objectAtIndex:row];
NSString *title = [[NSString alloc] initWithFormat:
@"You selected %@!", selected];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message : @"Thank you for choosing."
delegate:nil
cancelButtonTitle :@"Okay!"
otherButtonTitles :nil];
[alert show];
[agePicker resignFirstResponder];
}
-(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[pickerData objectAtIndex:row];
}
最佳答案
编辑, 帮助关闭您的选择器, 使其成为实例变量,在界面中声明您的选择器,
MyClass.h
@interface MyClass:UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{
UIPickerView *picker
}
MyClass.m
@interface MyClass()
property (nonatomic, retain) *selectedVal; //make it a NSString
@end
-(IBAction)UITextFieldEditingDidBegin
{
picker = [[UIPickerView alloc]
initWithFrame:CGRectMake(0, 244, 320, 270)];
picker.delegate = self;
picker.dataSource = self;
[self.view addSubview:picker];
//[picker release]; //Place your picker release in the dealloc method
}
您必须实现选择器的委托(delegate),
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
self.selectedVal = [pickerData objectAtIndex:row]
NSLog(@"Selected option: %@. ", self.selectedVal );
}
然后在完成按钮上,您的属性中就有选定的 val 可供使用
-(IBAction)donePressed
{
NSString *title = [[NSString alloc] initWithFormat:
@"You selected %@!", self.selectedVal];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message : @"Thank you for choosing."
delegate:nil
cancelButtonTitle :@"Okay!"
otherButtonTitles :nil];
[alert show];
[alert release]; //I noticed you release the picker, so not using ARC, so release alert!!
[picker resignFirstResponder];
//after done, remove the picker from the view
[picker removeFromSuperview];
}
关于objective-c - 我的选择器实际上并没有选择值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13520512/