当我滚动UIPickerView时,它会反弹回第一个

时间:2015-06-20 18:00:48

标签: ios objective-c

我在这里知道很多关于UIPickerView的问题,但我认为它们都没有解决我的问题。

当我向下滚动UIPickerView时,它立即回到第一个,所以我永远不能滚动到我想要的元素。当我用手指移动时,它也可以飞到右侧/左侧。

然而,滚动移动不起作用,但我触摸了我想要的元素,它可以工作,但第二次,它滚动回第一次,然后转到我触摸的那个。

我认为这几天都在困扰和困扰我。

我只需将UIPickerView拖到StoryBoard这里完整代码:

@implementation AddClassViewController
{
    NSArray *itemArray;
    BOOL firstTimeLoad;
}

@synthesize itemTextField;

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    itemArray = @[@"大一上学期", @"大一下学期",@"大二上学期", @"大二下学期",@"大三上学期", @"大三下学期",@"大四上学期", @"大四下学期",@"大五上学期", @"大五下学期"];

    firstTimeLoad = YES;
    self.itemPicker.hidden = YES;
    self.toolBarCancelDone.hidden = YES;

    //add pickerview
    self.itemPicker.dataSource = self;
    self.itemPicker.delegate = self;
    [self.itemPicker reloadAllComponents];
    [self.itemPicker selectRow:0 inComponent:0 animated:YES];

    self.itemTextField.delegate = self;
}

#pragma mark - pickerView
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return itemArray[row];
}

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return itemArray.count;
}

- (IBAction)itemCancel:(UIBarButtonItem *)sender {
    [UIView animateWithDuration:0.5 delay:0.1 options: UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.itemPicker.hidden = YES;
                         self.toolBarCancelDone.hidden = YES;
                     }
                     completion:^(BOOL finished){   }];
}

- (IBAction)itemDone:(UIBarButtonItem *)sender {
    self.itemTextField.text = [NSString stringWithFormat:@"%@",[itemArray objectAtIndex:[self.itemPicker selectedRowInComponent:0]]];

    [UIView animateWithDuration:0.5 delay:0.1 options: UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         self.itemPicker.hidden = YES;
                         self.toolBarCancelDone.hidden = YES;
                     }
                     completion:^(BOOL finished){  }];
}

//UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.view endEditing:YES];
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    [UIView animateWithDuration:0.5 delay:0.1 options: UIViewAnimationOptionCurveEaseIn
                     animations:^{ 
                         self.itemPicker.hidden = NO;
                         self.toolBarCancelDone.hidden = NO;
                         self.itemTextField.text = @"";
                     }
                     completion:^(BOOL finished){   }];

    self.itemPicker.hidden = NO;
    self.toolBarCancelDone.hidden = NO;
    self.itemTextField.text = @"";

    return NO;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return  YES;
}
- (IBAction)cancelButton:(UIBarButtonItem *)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)fetchClasses:(UIButton *)sender {
    //fetch data and call the callback
}
- (void)requestClassesInfo:(NSURL *)url withCallback:(VerifyClassesBlock)callback{
    //data fetch callback function
}
- (NSInteger)numberOfItem:(NSString *)itemNum{
    //return a term number
}
@end

我认为UIPickerView没有更多内容。它是由AutoLayout引起的吗?因为我没有设定它的大小。

更新

添加didSelectRow函数将解决此问题:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    [self.itemPicker reloadAllComponents];
}

感谢Linus G。

1 个答案:

答案 0 :(得分:0)

您必须为选择器视图添加函数didSelectRow才能完全正常工作。

希望有所帮助:)