【问题标题】:How to Show the Pickerview value in Textfield and hide the pickerView using barbuttonitem?如何在 Textfield 中显示 Pickerview 值并使用 barbuttonitem 隐藏 pickerView?
【发布时间】:2016-04-24 23:15:45
【问题描述】:

我有 2 个文本字段 stateText 和 providerText。如果我单击第一个文本字段的意思,它会显示 pickerView。之后我将选择 pickerView 值。我还添加了工具栏 @987654325 @ 在那个pickerView 中。然后我必须在Textfields 中显示pickerView 值并在选择PickerView 中的值后隐藏pickerView。此外,在获取TextFields 中的值后,指针应该移动到下一个TextField connectionNoText。

1.如何隐藏PickerView并在TextField中显示值?

2.无论手机大小,如何在View底部显示pickerview?

这是我的源代码:

NewConnectionviewController.m

-(void)viewDidLoad
{

[super viewDidLoad];

//ScrollView
self.view.backgroundColor = [UIColor grayColor];
scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

[scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.navigationController.navigationBar.frame.size.height + 510.0)];
[self.view addSubview:scrollView];


//statePickerView
_statePickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view. frame.size.height, self.view.frame.size.width, 216)];
_statePickerView.delegate = self;
_statePickerView.dataSource = self;
_statePickerView.showsSelectionIndicator = YES;
[_statePickerView setBackgroundColor:[UIColor lightGrayColor]];
[self.view addSubview:_statePickerView];

//providerPickerView
_providerPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view. frame.size.height, self.view.frame.size.width, 216)];
_providerPickerView.delegate = self;
_providerPickerView.showsSelectionIndicator = YES;
[_providerPickerView setBackgroundColor:[UIColor lightGrayColor]];
[self.view addSubview:_providerPickerView];

//ToolBar
UIToolbar *toolBar= [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,44)];
[toolBar setBarStyle:UIBarStyleBlackOpaque];
UIBarButtonItem *barButtonDone = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                  style:UIBarButtonItemStyleBordered target:self action:@selector(hidePickerView:)];
toolBar.items = @[barButtonDone];
barButtonDone.tintColor=[UIColor lightTextColor];
[barButtonDone setEnabled:YES];
[_statePickerView addSubview:toolBar];
//[_providerPickerView addSubview:toolBar];

//GettingView
[self stateView];
[self providerView];
[self connectionNoView];
[self addTestView];

}


-(void)hidePickerView:(UIBarButtonItem *)sender
{
NSLog(@"clicked");
[self.selectState resignFirstResponder];

}


-(void)stateView
{
UIView *stateView = [[UIView alloc]initWithFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height, self.view.frame.size.width, 80)];
stateView.backgroundColor = [UIColor blueColor];
[scrollView addSubview:stateView];

//stateLabel
UILabel *stateLabel = [[UILabel alloc]initWithFrame:CGRectMake(stateView.frame.origin.x+20,35, 70, 20)];
[stateLabel setText:@"State"];
[stateLabel setTextColor:[UIColor whiteColor]];
[stateView addSubview:stateLabel];

//TextField
NSLog(@"stateViewSize==>>%f",stateView.frame.origin.y);
stateText = [[UITextField alloc]initWithFrame:CGRectMake(stateView.frame.origin.x+110, 30, 150, 40)];
stateText.textColor = [UIColor blackColor];
stateText.backgroundColor = [UIColor clearColor];
[stateText setBorderStyle:UITextBorderStyleRoundedRect];
[stateText setPlaceholder:@"select State"];
[stateText setTag:0];
[stateView addSubview:stateText];
[stateText setDelegate:self];
}


-(void)providerView
{
UIView *providerView = [[UIView alloc]initWithFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height+80, self.view.frame.size.width, 80)];
providerView.backgroundColor = [UIColor orangeColor];
[scrollView addSubview:providerView];
 NSLog(@"providerViewsize==>>%f",providerView.frame.origin.y);

//providerLabel

UILabel *providerLabel = [[UILabel alloc]initWithFrame:CGRectMake(providerView.frame.origin.x+20, 35, 70, 20)];
[providerLabel setText:@"Provider"];
[providerLabel setTextColor:[UIColor whiteColor]];
[providerView addSubview:providerLabel];

//TextField
providerText = [[UITextField alloc]initWithFrame:CGRectMake(providerView.frame.origin.x+110,30, 150, 40)];
providerText.textColor = [UIColor blackColor];
[providerText setPlaceholder:@"select Provider"];
providerText.backgroundColor = [UIColor clearColor];
[providerText setTag:1];
[providerText setBorderStyle:UITextBorderStyleRoundedRect];
[providerView addSubview:providerText];
[providerText setDelegate:self];
}

-(void)connectionNoView
{

UIView *connectionNoView = [[UIView alloc]initWithFrame:CGRectMake(0, self.navigationController.navigationBar.frame.size.height+160, self.view.frame.size.width, 150)];
connectionNoView.backgroundColor = [UIColor greenColor];
[scrollView addSubview:connectionNoView];
NSLog(@"connectionNoViewsize==>>%f",connectionNoView.frame.origin.y);
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
// Show UIPickerView


if (textField.tag ==0)
{
    //stateText.inputView = _statePickerView;
    [UIView animateWithDuration:0.5 delay:0.1 options:UIViewAnimationOptionCurveEaseIn animations:^{
        _statePickerView.frame = CGRectMake(0, self.view.frame.size.height-216,self.view.frame.size.width, 216);
    }
                     completion:^(BOOL finished){
                     }];
}
else
{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@""
                                                   message:@"Please select state first."
                                                  delegate:self
                                         cancelButtonTitle:@"OK"
                                         otherButtonTitles:nil];
    [alert show];
}
return NO;
}


- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {

return 1;//Or return whatever as you intend
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component
{

if([thePickerView isEqual:_statePickerView])
{
return [STATE_ARRAY count];
}
else
{
  return [PROVIDER_ARRAY count];
}
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{

if([thePickerView isEqual:_statePickerView])
{
    return [STATE_ARRAY objectAtIndex:row];
}
else
{
    return [PROVIDER_ARRAY objectAtIndex:row];
}
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSString *firstPickerViewValue;
NSString *secondPickerViewValue;
if ([pickerView isEqual:_statePickerView])
{
    firstPickerViewValue = [STATE_ARRAY objectAtIndex:row];
    [_providerPickerView selectRow:row inComponent:0 animated:YES];
    secondPickerViewValue = [PROVIDER_ARRAY objectAtIndex:row];
    [_providerPickerView reloadAllComponents];
    [stateText setText:[NSString stringWithFormat:@"%@",firstPickerViewValue]];
    [providerText setText:[NSString stringWithFormat:@"%@",secondPickerViewValue]];
}

【问题讨论】:

    标签: ios size hide uipickerview show


    【解决方案1】:

    我终于找到了一个解决方案。PickerView 本身就是一个ViewController,所以我们无法隐藏pickerView。替代解决方案是,

    1.创建高度为 260 的 SubView 并将该视图添加到 Self.View。 (设置 Y 值为Self.View.Frame.Size.height)。

    2.将PickerView(默认高度 - 216)和ToolBar(默认高度 - 44)添加到该子视图。

    3.In BarButtonItem action 将该视图移到底部。(例如像这样设置框架)CGRectMake(0,Self.View.Frame.Size.Height,Self.View.Frame.Size.Width,216)

    【讨论】:

      【解决方案2】:

      我已经阅读了代码,老实说,我对你的方法感到很困惑,因为我在布置 UI 时倾向于避免使用幻数。无论如何,我认为您的两个问题都可以通过分配您的 slate textField 的 inputView 并将 inputAccessoryView 分配给您在代码中创建的工具栏来解决。 例如,

      stateText.inputView = _statePickerView
      

      那是 Swift,所以你会拥有

      [stateText setInputView:_statePickerView];

      然后你设置附件视图这样

      [stateText setInputAccessoryView: toolBar];
      

      虽然工具栏只在你的 viewDidLoad 方法的范围内,所以你应该修复它。这应该足以让你回到正确的道路上。要关闭 pickerView,只需在 hidePickerView 方法中 resignFirstResponder 选择 textField 即可。

      请注意,您的文本字段也仅限于创建它们的方法,因此您也应该修复它。

      【讨论】:

      • 要隐藏,如果我在 HidePickerView 方法中也写 [stateText resignFirstResponder]。无法隐藏pickerView。请帮我隐藏pickerView。
      • 好的,那么pickerView是否只在您按下stateText字段时出现?工具栏是否也出现了
      • ToolBar 也出现在 PickerView 中。但是没有调用 hidePickerView 方法。为什么没有调用 hidePickerView 方法?怎么说呢,nslog 值也没有显示
      • 好的,我现在知道了。您的 hidePickerView 需要是一个 IBAction,因此将其更改为 -(IBAction) hidePickerView { NSLog(@"clicked"); }
      • 应该打印出来点击。您需要添加您选择的文本字段 resignFirstResponder 代码以删除选择器视图
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多