我在这里知道很多关于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。
答案 0 :(得分:0)
您必须为选择器视图添加函数didSelectRow
才能完全正常工作。
希望有所帮助:)