多次使用 UIPickerView。 iOS Objective-C
Using UIPickerView multiple times. iOS Objective-C
我是 iOS Objective-C 编程的初学者,所以首先 - 抱歉我太傻了。
我正在使用 UIPickerView 填充 UITextField,首次使用时效果很好。
假设用户第一次使用 pickerview 时犯了错误。他想更正这个并再次打开同一个 pickerview。 Pickerview 是空的。
还缺少 okayButton。我究竟做错了什么?
这是我的代码:
#import "LoginViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
marksArray =[[NSMutableArray alloc] init];
fuelTypeArray =[[NSMutableArray alloc] init];
inputArray =[[NSMutableArray alloc] init];
marksArray = [NSMutableArray arrayWithObjects:@"Alfa Romeo", @"Aston Martin", @"BMW", @"Cadillac", @"Chevrolet", @"Chrysler", @"Citroen", @"Dacia", @"Daewoo", @"Dodge", @"Ferrari", @"Ford", @"Honda", @"Hummer", @"Hyundai", @"Infiniti", @"Jaguar", @"Jeep", @"Kia", @"Lamborghini", @"Lancia", @"Land Rover", @"Lexus", @"Maserati", @"Mazda", @"Mercedes-Benz", @"Mini", @"Mitsubishi", @"Nissan", @"Opel", @"Peugeot", @"Polonez", @"Pontiac", @"Porshe", @"Renault", @"Rover", @"Saab", @"Seat", @"Skoda", @"Smart", @"Subaru", @"Suzuki", @"Toyota", @"Volkswagen", @"Volvo", nil];
fuelTypeArray = [NSMutableArray arrayWithObjects:@"Benzyna", @"Benzyna+LPG", @"Diesel", @"Elektryczny", @"Hybryda", nil];
okayImageView.hidden = true;
okayButton.hidden= true;
//makes fuelTypePickerView as input console for markTextField
fuelTypePickerView.hidden = true;
fuelTypePickerView = [[UIPickerView alloc] init];
fuelTypePickerView.delegate = self;
fuelTypePickerView.showsSelectionIndicator = YES;
fuelTypeTextField.inputView = fuelTypePickerView;
//makes markPickerView as input console for markTextField
markPickerView.hidden = true;
markPickerView = [[UIPickerView alloc] init];
markPickerView.delegate = self;
markPickerView.showsSelectionIndicator = YES;
markTextField.inputView = markPickerView;
// scrolling login view controller
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 615)];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
okayImageView.hidden = false;
okayButton.hidden= false;
return 1;
}
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if([pickerView isEqual: markPickerView]){
return 45;
}else if([pickerView isEqual: fuelTypePickerView]){
return 5;
}else{
return 0;
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if([pickerView isEqual: markPickerView]){
self->inputArray = self->marksArray;
return inputArray[row];
}else if([pickerView isEqual: fuelTypePickerView]){
self->inputArray = self->fuelTypeArray;
return inputArray[row];
}else{
return 0;
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if([pickerView isEqual: markPickerView]){
markTextField.text = [inputArray objectAtIndex:row];
}else if([pickerView isEqual: fuelTypePickerView]){
fuelTypeTextField.text = [inputArray objectAtIndex:row];
}
}
-(IBAction) okayButtonPressed:(id)sender{
if(markPickerView.hidden!=YES){
okayImageView.hidden = true;
okayButton.hidden= true;
markPickerView.hidden=YES;
[markTextField resignFirstResponder];
}else if(fuelTypePickerView.hidden!=YES){
okayImageView.hidden = true;
okayButton.hidden= true;
fuelTypePickerView.hidden=YES;
[fuelTypeTextField resignFirstResponder];
}
}
@end
谢谢!
尝试在您的代码中添加以下行
@interface LoginViewController () <UITextFieldDelegate>
然后在 viewDidLoad
fuelTypeTextField.delegate = self;
markTextField.delegate = self;
现在在 LoginViewController
中实施 UITextField Delegate
-(void)textFieldDidBeginEditing:(UITextField *)sender{
okayImageView.hidden = NO;
okayButton.hidden = NO;
if([sender isEqual:fuelTypeTextField])
{
fuelTypePickerView.hidden = NO;
}
else{
markPickerView.hidden = NO;
}
}
在您的代码中,单击“确定”按钮后,您将隐藏 PickerView、ImageView 和 Button。但是在下次编辑 textField 时,您不会取消隐藏它们,这就是它们未显示的原因。
我是 iOS Objective-C 编程的初学者,所以首先 - 抱歉我太傻了。
我正在使用 UIPickerView 填充 UITextField,首次使用时效果很好。
假设用户第一次使用 pickerview 时犯了错误。他想更正这个并再次打开同一个 pickerview。 Pickerview 是空的。
还缺少 okayButton。我究竟做错了什么? 这是我的代码:
#import "LoginViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
marksArray =[[NSMutableArray alloc] init];
fuelTypeArray =[[NSMutableArray alloc] init];
inputArray =[[NSMutableArray alloc] init];
marksArray = [NSMutableArray arrayWithObjects:@"Alfa Romeo", @"Aston Martin", @"BMW", @"Cadillac", @"Chevrolet", @"Chrysler", @"Citroen", @"Dacia", @"Daewoo", @"Dodge", @"Ferrari", @"Ford", @"Honda", @"Hummer", @"Hyundai", @"Infiniti", @"Jaguar", @"Jeep", @"Kia", @"Lamborghini", @"Lancia", @"Land Rover", @"Lexus", @"Maserati", @"Mazda", @"Mercedes-Benz", @"Mini", @"Mitsubishi", @"Nissan", @"Opel", @"Peugeot", @"Polonez", @"Pontiac", @"Porshe", @"Renault", @"Rover", @"Saab", @"Seat", @"Skoda", @"Smart", @"Subaru", @"Suzuki", @"Toyota", @"Volkswagen", @"Volvo", nil];
fuelTypeArray = [NSMutableArray arrayWithObjects:@"Benzyna", @"Benzyna+LPG", @"Diesel", @"Elektryczny", @"Hybryda", nil];
okayImageView.hidden = true;
okayButton.hidden= true;
//makes fuelTypePickerView as input console for markTextField
fuelTypePickerView.hidden = true;
fuelTypePickerView = [[UIPickerView alloc] init];
fuelTypePickerView.delegate = self;
fuelTypePickerView.showsSelectionIndicator = YES;
fuelTypeTextField.inputView = fuelTypePickerView;
//makes markPickerView as input console for markTextField
markPickerView.hidden = true;
markPickerView = [[UIPickerView alloc] init];
markPickerView.delegate = self;
markPickerView.showsSelectionIndicator = YES;
markTextField.inputView = markPickerView;
// scrolling login view controller
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 615)];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
okayImageView.hidden = false;
okayButton.hidden= false;
return 1;
}
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if([pickerView isEqual: markPickerView]){
return 45;
}else if([pickerView isEqual: fuelTypePickerView]){
return 5;
}else{
return 0;
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if([pickerView isEqual: markPickerView]){
self->inputArray = self->marksArray;
return inputArray[row];
}else if([pickerView isEqual: fuelTypePickerView]){
self->inputArray = self->fuelTypeArray;
return inputArray[row];
}else{
return 0;
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if([pickerView isEqual: markPickerView]){
markTextField.text = [inputArray objectAtIndex:row];
}else if([pickerView isEqual: fuelTypePickerView]){
fuelTypeTextField.text = [inputArray objectAtIndex:row];
}
}
-(IBAction) okayButtonPressed:(id)sender{
if(markPickerView.hidden!=YES){
okayImageView.hidden = true;
okayButton.hidden= true;
markPickerView.hidden=YES;
[markTextField resignFirstResponder];
}else if(fuelTypePickerView.hidden!=YES){
okayImageView.hidden = true;
okayButton.hidden= true;
fuelTypePickerView.hidden=YES;
[fuelTypeTextField resignFirstResponder];
}
}
@end
谢谢!
尝试在您的代码中添加以下行
@interface LoginViewController () <UITextFieldDelegate>
然后在 viewDidLoad
fuelTypeTextField.delegate = self;
markTextField.delegate = self;
现在在 LoginViewController
中实施 UITextField Delegate-(void)textFieldDidBeginEditing:(UITextField *)sender{
okayImageView.hidden = NO;
okayButton.hidden = NO;
if([sender isEqual:fuelTypeTextField])
{
fuelTypePickerView.hidden = NO;
}
else{
markPickerView.hidden = NO;
}
}
在您的代码中,单击“确定”按钮后,您将隐藏 PickerView、ImageView 和 Button。但是在下次编辑 textField 时,您不会取消隐藏它们,这就是它们未显示的原因。