1

我确定这里的某个地方是解决方案,但我已经搜索了很长时间,但没有找到任何东西

所以我的设置:.h

IBOutlet UITextField *valueOne;
IBOutlet UITextField *valueTwo;
    IBOutlet UILabel *total; 


- (IBAction)Lange;
@property (nonatomic, retain) UITextField *valueOne;
@property (nonatomic, retain) UITextField *valueTwo;

.m

- (IBAction)Lange{
    float f = arc4random_uniform(3) ;   
    float x = ([valueOne.text floatValue]-1.5)/1.5;
    float c = (5+[valueTwo.text floatValue])/2;
    float o = (x+c)/2+f;

    total.text = [[NSString alloc]initWithFormat:@"%.fcm", o]; 

}

我的问题:我正在搜索代码/指南,向我展示如何使用pickerview,我的意思是: 1. 用户在文本字段中输入 ValueOne。2. 用户选择 4 个选项之一,即 ValueTwo(在 .m-> float c valueTwo.text 中应填写我要设置的 4 个变量之一)。那么我怎样才能得到带有预设变量的pickerview,而用户只需要选择它呢?

如果有任何不清楚的地方,请随时发表评论。

编辑:我希望隐藏键盘并显示pickerview,并且仅在单击文本字段 valueTwo 时才会显示pickerview。

4

3 回答 3

2

绝对是上面两个答案的组合。

首先,设置您的类以符合UITextFieldDelegateUIPickerViewDelegate协议:

@interface MyViewController : UIViewController <UITextFieldDelegate,
    UIPickerViewDelegate, UIPickerViewDataSource>
...
@end

接下来,为您的项目数组和选择器视图声明属性。
然后您可以在代码中(或在 Nib 中)创建您的选择器视图。无论哪种情况,请确保将选取器的delegatedatasource属性设置为视图控制器。

设置delegate要修改的文本字段的属性,self然后实现此方法:

- (void)textFieldShouldBeginEditing:(UITextField *)textfield {
  [self presentPicker];
  return NO;
}

给@DavidH 的小费

您可以像这样定义选择器方法:

- (void)presentPicker {
  UIPickerView *picker = [[UIPickerView alloc] initWithFrame:SOME_FRAME_HERE];
  picker.delegate = self;
  picker.dataSource = self;

  // TODO: animate this on screen
  [self.view addSubview picker];
}

最后,您必须在这些协议中实现必要的方法:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
  return self.items.count;  //where items is your array of items
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row inComponent:(NSInteger)component {
  return [self.items objectAtIndex:row];
}

查看UIPickerViewDelegate协议的方法,了解您将如何响应用户选择并关闭选择器。

作为一个无耻的自我推销,我最近在NSScreencast上发布了一个关于如何构建自定义选择器视图组件的插曲,其中包括将其后面的视图变暗,在屏幕上和屏幕外对其进行动画处理,以及为完成和取消按钮添加工具栏。 我在这里只提到这一点,因为它与你想要做的事情直接相关。

希望这可以帮助!

于 2012-07-22T14:35:16.227 回答
0

这非常简单——您应该有一个 ivar 数组,其中包含您将加载到 pickerview 的所有元素。一旦您从用户那里获得了新的输入,您就可以更新数组。当用户通过以下方法启动选择器视图时,数组将自动加载:

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component      
 {
return [array objectAtIndex:row];
 }

这个根据新数组更新行数:

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

 return [array count];
 }

希望有帮助。

于 2012-07-22T14:20:32.293 回答
0

您将使用 UITextFieldDelegate 调用“textFieldShouldBeginEditing:”并为您要使用选择器的那个返回 NO。当您收到该消息并准备发送“否”时,您将对选择器进行动画处理。当用户选择一个值时,您将在相关的 textField 上设置该值,并关闭选择器。

于 2012-07-22T14:21:34.187 回答