2015-07-20 75 views
0

我正在製作單一視圖iOS應用程序。我有兩個UIPickerView元素並在for循環中初始化它們,爲每個元素創建一串字符串。我隱藏其中的一個viewDidLoad,因爲我打算在它們之間切換。正在顯示的那個顯示「?」爲每行而不是正確的字符串。在同一個iOS視圖中顯示兩個UIPickerView,但值顯示爲問號

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

我看到你的代碼的兩個錯誤:

  1. 在你的.h,你initializating與IBOutlet中的NSArras。爲什麼?他們應該只是NSMutableArray xxxxArray
  2. 不是那麼糟糕,在.h中,採集者應該既是弱的屬性。

我希望第一個錯誤解決您的問題,但我不知道。

+0

這都沒有解決在選取器視圖中看到問號的問題。 – rmaddy

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; 

更重要的是,只使用一個選擇器視圖。當您希望在英里和米之間進行更改時,只需重新加載一個選取器視圖並設置兩個委派方法以使用基於當前模式的正確數組。

相關問題