多次使用 UIPickerView。 iOS Objective-C

Using UIPickerView multiple times. iOS Objective-C

我是 iOS Objective-C 编程的初学者,所以首先 - 抱歉我太傻了。

我正在使用 UIPickerView 填充 UITextField,首次使用时效果很好。

photo

假设用户第一次使用 pickerview 时犯了错误。他想更正这个并再次打开同一个 pickerview。 Pickerview 是空的。

photo

还缺少 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 时,您不会取消隐藏它们,这就是它们未显示的原因。