2

我的接口文件上有这个:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
    <UIPickerViewDataSource, UIPickerViewDataSource>

// PickerView Array
@property (strong, nonatomic) NSArray *pickerNames;
@property (strong, nonatomic) NSArray *pickerValues;    
@property (strong, nonatomic) IBOutlet UIPickerView *picker;

- (IBAction)buttonSelectPicker;

@end

我的实现文件中有这个:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // PickerView Array
    _pickerNames = @[@"Data1", @"Data2", @"Data3", @"Data4", @"Data5"];
    _pickerValues = @[@"val1", @"val2", @"val3", @"val4", @"val5"];
    _picker.frame = CGRectMake(0, 1000, 320, 216);
}

所有这些代码现在都可以在我的 iPod (iOS 6.1.3) 上完美运行,但我实际上想要做的更多事情有问题......他们是......

  1. 当应用程序第一次加载时,UIPickerView 被隐藏(在屏幕区域之外)。我尝试通过添加这一行(on viewDidLoad),但它没有用。

    _picker.frame = CGRectMake(0, 1000, 320, 216);

  2. 然后当用户点击buttonSelectPicker按钮时, UIPickerView 出现。这行代码也不起作用:

    - (IBAction)buttonSelectPicker { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; _pickerviewContainer.frame = CGRectMake(0, 289, 320, 216); [UIView commitAnimations]; }

  3. 当用户点击 UIPickerView 区域外的任何地方时,它将隐藏 UIPickerView。我有这段代码可以关闭键盘,但我不知道如何修改以关闭 UIPickerView :

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UIView * txt in self.view.subviews){ if ([txt isKindOfClass:[UITextField class]]) { [txt resignFirstResponder]; } } }

谢谢你...

4

2 回答 2

3

你基本上是在重新创造什么inputView。UIKit 允许您定义任何自定义输入法,而不仅仅是键盘,因此,您可以放置​​一个UITextField, 并设置inputView如下:

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 162)];

picker.dataSource = self;
picker.delegate = self;

self.textField.inputView = picker;

(选择器也可以从笔尖加载)

然后你使用正常的方法来处理文本字段

// Show keyboard/picker
[self.textField becomeFirstResponder]

// Dismiss keyboard/picker
[self.textField resignFirstResponder]

当文本字段成为第一响应者时,将显示选择器而不是键盘。我不知道这是否适合您的需求,但可以将其视为一种更清洁的替代方式。

于 2013-09-13T05:39:28.113 回答
1

您可以简单地使用:

  self.dataPicker.hidden=NO; and 
  self.dataPicker.hidden=YES;

在适当的情况下。

更新:在另一个视图上使用 UIPicker,然后使用

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
            self.infoView.frame = CGRectMake(0 , 70,  self.infoView.frame.size.width,  self.infoView.frame.size.height);

        }
                         completion:^(BOOL finished) {

                         }];

其中 infoView 是新 UIView 的名称。您需要调用两次视图动画方法来隐藏(将其移出视图控制器)并显示视图并相应地更改 X、Y 坐标。

于 2013-09-13T05:18:31.760 回答