2014-07-25 46 views
0

第一個評論,所以我希望我做對了。UIPicker單個組件顯示多個陣列

我正在與UIPicker戰鬥。我試圖在單個選取器組件中顯示2列數據。我選擇在1個組件中執行此操作的原因是我希望數組滾動到一起,這使我無法獲取多個組件。

問題是,我無法使用這種方式工作,因爲titleForRow和viewForRow只會返回一個值(按照C的規則)。我試着讓它們輸出數組和字節,但是導致數據類型錯誤。 我可以使用1組件,1個數組與viewForRow工作得很好,但只允許調整整個字段,而不是字符串的一部分。

下面的代碼很好用,並給出了返回label2的正確答案;如果更改爲返回label1也是正確的,我如何讓兩者都顯示?

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UILabel *label1; 
    { 
     label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 150.0f, 130.0f, 60.0f)]; 

     label1.textAlignment = NSTextAlignmentLeft; 

     label1.text = [_firstList objectAtIndex:row]; 
    } 

    UILabel *label2; 
    { 
    label2 = [[UILabel alloc] initWithFrame:CGRectMake(100.0f, 10.0f, 175.0f, 100.0f)]; 

     label2.textAlignment = NSTextAlignmentCenter; 

     label2.text = [_secondList objectAtIndex:row]; 
    } 
     return label2; 
} 

回答

0

設置您的UIPickerView有一個組件。

現在假設你的兩個陣列_firstList_secondList有相同數量在他們的對象,你有兩個選擇:

  1. 使用簡單pickerView:titleForRow:forComponent:方法返回一個字符串從兩個值建立:

    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
        return [NSString stringWithFormat:@"%@ - %@", _firstList[row], _secondList[row]]; 
    } 
    

    當然,您可以根據需要格式化兩個字符串。這是一個例子。

  2. 使用pickerView:viewForRow:forComponent:reusingView:像你試過但返回一個單一的視圖,添加了兩個標籤。

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
        UILabel *label1; 
        UILabel *label2; 
        if (view) { 
         label1 = (UILabel *)[view viewWithTag:1]; 
         label1 = (UILabel *)[view viewWithTag:2]; 
        } else { 
         view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)]; 
         UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 0.0f, 130.0f, 40.0f)]; 
         label1.tag = 1; 
         label1.textAlignment = NSTextAlignmentLeft; 
         UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(100.0f, 0.0f, 175.0f, 40.0f)]; 
         label2.tag = 2; 
         label2.textAlignment = NSTextAlignmentCenter; 
         [view addSubview:label1]; 
         [view addSubview:label2]; 
        } 
    
        label1.text = _firstList[row]; 
        label2.text = _secondList[row]; 
    
        return view; 
    } 
    

    請注意如何正確使用重用視圖。

+0

謝謝你給我看 - 這太好了。第一部分看起來比我運行的任何東西都好得多。第2部分,label1 = [view viewWithTag:1];拋出一個不兼容的指針警告並且不會運行,(不兼容的指針類型從'UIView *'分配給'UILabel *')。感謝你的時間(對不起,我太新了,不能投票給你)。 – Blimey

+0

我忘了這些線的演員。我剛更新了答案來解決這個問題。 – rmaddy

+0

這是一個令人印象深刻的響應時間。我會回答我擅長的一些事情,並獲得投票的能力。謝謝。 – Blimey