我正在制作单一视图iOS应用程序。我有两个UIPickerView元素,并在for循环中初始化它们,为每个元素创建一堆字符串。我在viewDidLoad上隐藏其中一个,因为我打算在它们之间切换。正在显示的那个显示"?"对于每一行而不是正确的字符串。
viewcontroller.h位于
之下#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate>
{
IBOutlet NSMutableArray *milesArray;
IBOutlet NSMutableArray *metersArray;
}
@property (weak, nonatomic) IBOutlet UITextField *distanceText;
@property (weak, nonatomic) IBOutlet UISegmentedControl *distanceUnits;
@property (weak, nonatomic) IBOutlet UITextField *timeText;
@property (weak, nonatomic) IBOutlet UILabel *splitLabel;
@property (weak, nonatomic) IBOutlet UITextField *meterText;
@property (weak, nonatomic) IBOutlet UITextField *feetText;
@property (weak, nonatomic) IBOutlet UITextField *inchesText;
@property (strong, nonatomic) IBOutlet UIPickerView *meterPicker;
@property (strong, nonatomic) IBOutlet UIPickerView *milePicker;
- (IBAction)backgroundTap:(id)sender;
- (IBAction)textFieldDidEndEditing:(UITextField *)textField;
@end
viewcontroller.m是下一个
#import "ViewController.h"
#import <math.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
milesArray = [[NSMutableArray alloc] init];
metersArray = [[NSMutableArray alloc] init];
_meterText.text = @"0";
_feetText.text = @"0";
_inchesText.text = @"0";
_distanceText.text = @"0";
_timeText.text = @"00:00:00.00";
_milePicker.hidden = YES;
//set picker data
for(int i = 0; i < 1000; i++)
{
NSString *str = [NSString stringWithFormat:@"%d", (i+1)*100];
[metersArray addObject:str];
NSString *str1 = [NSString stringWithFormat:@"%0.1f", (i+1)*0.1];
[milesArray addObject:str1];
}
self.meterPicker.dataSource = self;
self.milePicker.delegate = self;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)backgroundTap:(id)sender{
[self.view endEditing:(YES)];
}
// The number of columns of data
- (long)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
// The number of rows of data
- (long)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(pickerView.tag == 6)
{
return metersArray.count;
}
else if(pickerView.tag == 7)
{
return milesArray.count;
}
else
return 0;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if(pickerView.tag == 6)
{
return metersArray[row];
}
else if(pickerView.tag == 7)
{
return milesArray[row];
}
else
return @"error";
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
long index = row;
_splitLabel.text = [NSString stringWithFormat: @"%ld", index];
}
@end
我认为当你有两个而不是只有一个uipickerview时,它与初始化它们有关。我可能做错了。
先谢谢,我希望一切都很清楚。
答案 0 :(得分:0)
我在您的代码中看到两个错误:
if (usernameRequest.responseText.trim() == "ok")
我希望第一个错误可以解决您的问题,但我不确定。
答案 1 :(得分:0)
一个大问题是viewDidLoad
中的以下两行:
self.meterPicker.dataSource = self;
self.milePicker.delegate = self;
您没有为里程选择器设置dataSource
,也没有为仪表选择器设置delegate
。
你想:
self.meterPicker.dataSource = self;
self.meterPicker.delegate = self;
self.milePicker.dataSource = self;
self.milePicker.delegate = self;
更好的是,只使用一个选择器视图。当您希望在英里和米之间切换时,只需重新加载一个选择器视图并设置两个委托方法,以便根据当前模式使用正确的阵列。