【问题标题】:My picker is not actually selecting values?我的选择器实际上并没有选择值?
【发布时间】:2012-11-22 21:57:51
【问题描述】:

所以我有一个弹出的选择器而不是键盘,但是当您滚动到选择器上的不同点时它不会改变值。我通过让警报显示选择了哪个年龄来测试这一点,并且它永远不会从第一个选项改变。我认为警报已损坏,但选择器中当前选定选项的蓝色选择器轮廓也没有显示。以下是选择器和警报的代码:

- (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];
}

【问题讨论】:

  • 如果有人想对此有所了解,我也无法解除选择器。如果你不能告诉我我对 Xcode 真的很陌生(并且对一般编程不太了解)
  • 像任何其他 UIView 一样,您可以为其 alpha 或帧位置设置动画,我认为它没有内置的隐藏/显示机制。

标签: objective-c ios6 xcode4.5 picker


【解决方案1】:

编辑, 帮助解雇你的选择器, 让它成为一个实例变量,在界面中声明你的选择器,

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

}

你必须为选择器实现委托,

- (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];

}

【讨论】:

  • 非常感谢!如果您愿意回答,我确实还有一个问题,即使一切正常。选择器仍然没有悬停在当前选定值上的选择器栏,尽管它确实将中间的那个识别为当前选定值。你知道它为什么不显示或如何让它出现吗?
猜你喜欢
  • 1970-01-01
  • 2017-08-08
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多