aah*_*ens 19 iphone uipickerview
我有一个touchesEnded事件,用于检查何时按下UITextField.我想要它做的是隐藏/显示UIPickerView.如何才能做到这一点?
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
if (CGRectContainsPoint([self.textField frame], [touch locationInView:self.view]))
{
NSString * error = @"Touched the TextField";
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Selection!" message:error delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
//Want to show or hide UIPickerView
}
}
Run Code Online (Sandbox Code Playgroud)
触摸发生时我已经分配了UIPickerView
@interface ThirdViewController : UIViewController <UITextFieldDelegate,UIPickerViewDelegate> {
IBOutlet UIPickerView *pickerView;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*att 35
切换"隐藏"属性将起到作用,但也会给出一个非常突然的显示.
避免这种情况的一种方法是通过将选择器嵌入到UIActionSheet中来使拾取器从屏幕底部向上滑动.
这是一个例子:
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
CGRect pickerFrame = CGRectMake(0, 0, 0, 0);
UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
pickerView.showsSelectionIndicator = YES;
pickerView.dataSource = self;
pickerView.delegate = self;
[sheet addSubview:pickerView];
[pickerView release];
[sheet showInView:view];
[sheet setBounds:CGRectMake(0, 0, 320, 415)];
self.actionSheet = sheet; // assuming you have setup a property to hold the action sheet
[sheet release];
Run Code Online (Sandbox Code Playgroud)
当您完成选择器后,将其解雇:
[self.actionSheet dismissWithClickedButtonIndex:0 animated:YES];
Run Code Online (Sandbox Code Playgroud)
这种方法也可以用于掺入按钮,在选择器上方的栏("完成","上一页","下一页"等) -有一个如何做一个很好的解释在这里.
小智 23
因为我看到关于这些解决方案的评论不适用于iOS 7,我将假设此线程仍然相关并正在搜索.
我发现这样做的最好方法是将UIPickerView附加到(隐藏的)UITextField作为输入视图,如:
_myPicker = [[UIPickerView alloc] init];
_myPicker.delegate = self;
_myPicker.showsSelectionIndicator = YES;
myTextField.inputView = _myPicker;
Run Code Online (Sandbox Code Playgroud)
如果需要,您始终可以隐藏文本字段.然后,您可以通过激活文本字段作为第一响应者来显示/隐藏UIPickerView,如:
[myTextField becomeFirstResponder];
[myTextField resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)
我已经在iOS 7上验证了这个功能,并且我已经让它在iOS 5上工作了.
Joe*_*out 14
UIPickerView继承自UIView,因此您应该只能切换其"隐藏"属性:
if (pickerView) pickerView.hidden = !pickerView.hidden;
Run Code Online (Sandbox Code Playgroud)
我正在使用一个假人UITextField
来显示/隐藏UIPickerView
首先,添加一个的UITextField作为@property
你的UIViewController
。(可选)同时添加UIPickerView
,
@property (strong, nonatomic) UITextField *dummyTextField;
Run Code Online (Sandbox Code Playgroud)
其次,指定UIPickerView
作为inputView
对UITextField
。将自己指定为dataSource
与delegate
对UIPickerView
。UITextField
需要添加为你的一个子视图UIViewController
的view
。
- (void)viewDidLoad {
[super viewDidLoad];
UIPickerView *picker = [[UIPickerView alloc] init];
[picker setDataSource:self];
[picker setDelegate:self];
self.dummyTextField = [UITextField new];
self.dummyTextField.inputView = picker;
[self.dummyTextField setHidden:YES];
[self.view addSubview:self.dummyTextField];
}
Run Code Online (Sandbox Code Playgroud)
最后,添加一种机制来显示和隐藏UIPickerView
。由于我使用的是虚拟道具UITextField
,因此我决定添加以下UIBarButtonItem
名称的“过滤器” IBAction
:
- (IBAction)tappedFilterButton:(UIBarButtonItem *)sender {
if (self.dummyTextField.isFirstResponder) {
[self.dummyTextField resignFirstResponder];
}
else {
[self.dummyTextField becomeFirstResponder];
}
}
Run Code Online (Sandbox Code Playgroud)