2012-08-01 5 views
1

나는 textField의 inputView를 가진 UIPickerView 디스플레이를 가지고있다. 나는 pickerView를 두 개의 열로 나눴다. 하나는 정수 50-500입니다. 다른 하나는 0.25,0.50,0.75입니다. 나는 그들로 하여금 전체 숫자를 선택하고 다른 컬럼과 함께 소수의 소수를 선택할 수 있기를 바랍니다. "전체"번호를 표시하는 방법을 알아낼 수 없습니다. 두 번째 열을 이동할 때 열 1을 이동하는 것으로 등록하고 전체 수를 변경합니다. 사용자가 전체 숫자, 숫자의 소수 부분, 완료된 숫자를 선택할 수있게하고 textField가 "100.25"형식 또는 숫자를 나타내는 숫자를 표시하도록합니다. 완성 된 버튼을 코딩했습니다 ... 그리고 전체 숫자는 단지 형식 즉 "100"으로 표시됩니다.둘 이상의 열이있는 UIpickerView로 TextField를 채우려면 어떻게해야합니까?

감사합니다.

업데이트 !!! 암호!!!!

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent: (NSInteger)component{ 
if ([pickerView isEqual:weightPickerView]) { 
    weightField.text = [NSString stringWithFormat:@"%d.%d",[weightPickerArray objectAtIndex:row], [weightPickerArray2 objectAtIndex:row]]; 



-(void)populateWeightPickerArray{ 
weightPickerArray = [[NSMutableArray alloc] init]; 
for (int weight = 50; weight <=500; weight++) { 
    NSString *weightString = [NSString stringWithFormat:@"%d%",weight]; 
    [weightPickerArray addObject:weightString]; 
} 
} 

-(void)populateWeightPickerArray2{ 
weightPickerArray2 = [[NSMutableArray alloc] init]; 
[weightPickerArray2 addObject:@"0.25"]; 
[weightPickerArray2 addObject:@"0.50"]; 
[weightPickerArray2 addObject:@"0.75"]; 
} 

그래서 사용자가 무게를 선택하길 원합니다. 예를 들어, 100 열은 1, 2 열은 0.25입니다. 그런 다음 텍스트 필드에 100.25 ...

업데이트 2를 표시하고 싶습니다. 코드가 변경되었습니다. 이제 오류가 발생합니다.

[2012-08-03 10:39:39 -0500에 시작된 세션입니다.] 2012-08-03 10 : 39 : 45.656 CalorieAppFinal [1088 : 207] - NSCFNumber isEqualToString :] : 인스턴스 0x4b336c0에 전송 된 인식 할 수없는 선택자 2012-08-03 10 : 39 : 45.661 CalorieAppFinal [1088 : 207] * 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료 중, 이유 : '- [NSCFNumber isEqualToString : ] : 인식 할 수없는 선택이 먼저 던져 여기

에서 * 콜 스택 '인스턴스 0x4b336c0로 보내 내가 내 weightPicker를 초기화하는 방법입니다

첫 번째 대답으로 편집 0
-(IBAction)weightFieldDidBeginEditing{ 
weightPickerView = [[UIPickerView alloc] init]; 
weightField.inputView = weightPickerView; 
weightPickerView.showsSelectionIndicator = YES; 
weightPickerView.delegate = self; 
weightPickerView.dataSource = self; 
[weightPickerView release]; 
} 


-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 

if ([pickerView isEqual:weightPickerView]) { 
    int valOne = [[weightPickerArray objectAtIndex:row] intValue]; 
    CGFloat valTwo = [[weightPickerArray2 objectAtIndex:row] floatValue]; 
    weightField.text = [NSString stringWithFormat:@"%d.%.2f",valOne, valTwo]; 
} 


-(void)populateWeightPickerArray{ 
weightPickerArray = [[NSMutableArray alloc] init]; 
for (int weight = 50; weight <=500; weight++) { 
    [weightPickerArray addObject:[NSNumber numberWithInt:weight]]; 
} 
} 

-(void)populateWeightPickerArray2{ 
weightPickerArray2 = [[NSMutableArray alloc] init]; 
[weightPickerArray2 addObject:[NSNumber numberWithFloat:0.25f]]; 
[weightPickerArray2 addObject:[NSNumber numberWithFloat:0.50f]]; 
[weightPickerArray2 addObject:[NSNumber numberWithFloat:0.75f]]; 
} 
+0

weightPickerView는 어떻게 초기화됩니까? – Rick

+0

- (IBAction) weightFieldDidBeginEditing { \t weightPickerView = [[UIPickerView alloc] init]; \t weightField.inputView = weightPickerView; \t weightPickerView.showsSelectionIndicator = YES; \t weightPickerView.delegate = self; \t weightPickerView.dataSource = self; \t [weightPickerView release]; } @Rick – user1450221

+0

- (IBAction) weightFieldDidBeginEditing에서 weightPickerView를 릴리스 한 다음 나중에 "if ([pickerView isEqual : weightPickerView])"에 액세스하려고 시도한 것 같습니다. weightPickerView를 사용하여 완료 한 후에 만 ​​(뷰에서 피커 뷰를 제거한 후) release하십시오. – Rick

답변

1

이 시도 :

-(void)populateWeightPickerArray2 
{ 
    weightPickerArray2 = [[NSMutableArray alloc] init]; 
    [weightPickerArray2 addObject:@".25"]; /* remove the leading zero */ 
    [weightPickerArray2 addObject:@".50"]; /* remove the leading zero */ 
    [weightPickerArray2 addObject:@".75"]; /* remove the leading zero */ 
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if ([pickerView isEqual:weightPickerView]) 
    { 
     /* Updated the following line with selectedRowinComponent */ 
     weightField.text = [NSString stringWithFormat:@"%@%@",[weightPickerArray objectAtIndex:[weightPickerView selectedRowInComponent:0]], [weightPickerArray2 objectAtIndex:[weightPickerView selectedRowInComponent:1]]]; 
    } 
} 

이 계산에 숫자를 사용하려면 :

float number = [weightField.text floatValue]; 

당신이 "0.25", "0.50"와 "0.75", 수행해야 할 것이다 표시하려면 소수 세그먼트를 정수 세그먼트에 추가하기 전에 선행 제로를 제거하는 일부 문자열 조작. 이 부분을 참조하십시오 post

+0

숫자 계산에 숫자를 사용하려면 코드의 어느 위치에서나 [weightField.text floatValue]를 사용하면됩니다. – Rick

+0

위 코드는 pickerView didselect 행에 대해 사용했지만 올바른 숫자를 표시하는 데는 완전히 올바르게 작동하지 않습니다. 예를 들어 피커를 사용하면 첫 번째 행에서 51이 선택되고 두 번째 행에서 .50이 선택되고 textField에 51.50이 표시되면 오른쪽 열 (소수)을 .75로만 이동하면 textField가 52.75로 변경됩니다 그것이 있어야하는 것의 (51.75). – user1450221

+0

나는 본다. 그 이유는 weightField.text = [NSString stringWithFormat : @ "% @ % @", [weightPickerArray objectAtIndex : row], [weightPickerArray2 objectAtIndex : row]와 같은 "행"변수를 사용했기 때문입니다. 첫 번째 열의 행과 두 번째 열의 다른 변수를 기억하려면 다른 변수를 사용해야합니다. – Rick

1

**는 두 가지 일반적인 방법이

문자열의 float 또는 10 진수를 표시 한

혼란을 조금했다.

stringWithFormat 
stringByAppendingFormat 

그래서 당신은 두 개의 별도의 방법을 트리거 두 개의 열/선택기가있는 경우, 또는 특정 선택기에 대해 동일한 방법을 유발하지만, 확인하는 경우 당신이 할 수 있습니다 :

- (void)somePickerDidChangeValueMethod:(UIPicker)picker 
{ 
    //If you have on float value 
    myTextField.text = [NSString stringWithFormat:@"%.2f",yourFloatValue]; 
      //the %.xf represents how many decimal places to show 
    //If you have two int values 
    myTextField.text = [NSString stringWithFormat:@"%d.%d",int1,int2]; 


    //If incoming number is a float 
    myTextField.text = [myTextField.text stringByAppendingFormat:@".%.0f",yourFloatValue]; 
    //If incoming number is an int 
    myTextField.text = [myTextField.text stringByAppendingFormat:@".%d",intVal]; 
} 

는 희망이 도움이됩니다.

+0

pickerView didSelectRow 메서드를 사용하고 textField.text = "(코드)"를 사용하고 있습니다. didSelectRow 메서드를 사용하여 버전을 시험해 보았습니다. 출력에 정말 이상한 숫자가 있습니다. pickerView에 대한 코드를 공유하고 출력을 표시합니다. 그걸 보시고 다시 나를 도울 수 있는지 확인해 주시겠습니까? 질문으로 코드를 업데이트 할 것입니다. @vitality – user1450221

0

나중에 수학에서 값을 사용할 계획이라면 장기적으로 NSNumber를 사용하는 것이 더 쉽습니다. 당신까지 - 둘 다 작동합니다.

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if ([pickerView isEqual:weightPickerView]) 
    { 
     int valOne = [[weightPickerArray objectAtIndex:row] intValue]; 
     CGFloat valTwo = [[weightPickerArray2 objectAtIndex:row] floatValue]; 
     weightField.text = [NSString stringWithFormat:@"%d.%.2f",valOne,valTwo]; 
    } 
} 


-(void)populateWeightPickerArray 
{ 
    weightPickerArray = [[NSMutableArray alloc] init]; 
    for (int weight = 50; weight <=500; weight++) 
    { 
     //easier to store NSNumberWithInt as opposed to a string 
     [weightPickerArray addObject:[NSNumber numberWithInt:weight]]; 
    } 
} 

-(void)populateWeightPickerArray2 
{ 
    weightPickerArray2 = [[NSMutableArray alloc] init]; 
    [weightPickerArray2 addObject:[NSNumber numberWithFloat:0.25f]]; 
    [weightPickerArray2 addObject:[NSNumber numberWithFloat:0.50f]]; 
    [weightPickerArray2 addObject:[NSNumber numberWithFloat:0.75f]]; 
} 

그런 시도해보십시오.

희망이 있습니다.

+0

귀하의 조언을 받아 NSNumber를 사용했지만 지금은 앱을 실행하고 weightField를 클릭하면 앱이 다운됩니다. 오류는 질문에 게시됩니다. 그리고 예, 나중에 수학 계산에서 숫자를 사용할 것입니다. @활력. – user1450221

관련 문제