2014-09-25 3 views
1

У меня есть UIPickerView, который возвращает NSArray с 4 strings. Когда пользователь прокручивает UIPickerView, обновляется UITextField с выбранной строкой. Я хотел бы вернуть первый символ каждого string в NSArray и обновить UITextField с этим символом.Возврат первого символа строки в NSArray для UIPickerView didSelectRow

Как вы можете видеть из моего кода, я попытался достичь этой функциональности, используя self.noiseLevelArray = [noiseArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];, который я нашел в нескольких разных вопросах переполнения стека.

Вот код для сборщика:

// Noise picker 
self.noisePicker = [[UIPickerView alloc]init]; 
[noisePicker setDataSource:self]; 
[noisePicker setDelegate:self]; 
self.noiseArray = [[NSArray alloc]initWithObjects:@"4: Extreme Noise (Impossible)", @"3: Very Noisy (Loud Shouting)", @"2: Noisy (Shouting)", @"1: Not Noisy (Normally)", nil]; 
//self.noiseLevelArray = [noiseArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

// Call noisePicker method 
[self noisePickerTextField]; 

Вот код для моего подборщика:

// Picker components 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return [noiseArray count]; 
    //return [noiseLevelArray count]; 
} 

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

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    NSString *noiseString = [[NSString alloc]initWithFormat:@"%@", [noiseArray objectAtIndex:row]]; 
    //NSString *noiseString = [noiseLevelArray objectAtIndex:0]; 
    if ([self.empNoise1 isFirstResponder]) { 
     self.empNoise1.text = noiseString; 
    } 
    else if ([self.empNoise2 isFirstResponder]) { 
     self.empNoise2.text = noiseString; 
    } 
... 

Как вы можете видеть, UITextField обновляется с полной string в зависимости от того, строка выбран в UIPickerView. Я бы хотел, чтобы он по-прежнему отображал полный string, но обновлял UITextField только с первым символом (в данном случае 1, 2, 3, or 4). Любая помощь высоко ценится!

ответ

2
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    NSString *noiseString = [[NSString alloc]initWithFormat:@"%@", [[noiseArray objectAtIndex:row] substringToIndex:1]]; 
    //NSString *noiseString = [noiseLevelArray objectAtIndex:0]; 
    if ([self.empNoise1 isFirstResponder]) { 
     self.empNoise1.text = noiseString; 
    } 
    else if ([self.empNoise2 isFirstResponder]) { 
     self.empNoise2.text = noiseString; 
    } 
} 

Попробуйте это. Он использует следующий метод:

NSString * firstLetter = [word substringToIndex:1]; 
+0

Это именно то, что я ищу, спасибо большое! – rosshump

2

Попробуйте это .. `

self.empNoise1.text = [noiseString substringToIndex:1];` 

Возвращает новую строку, содержащую символы приемника до, но не включая тот, в данном индексе.

Link

+0

Это то, что мне нужно, спасибо! К сожалению, я не могу принять оба ответа, и вы отправили почти точно то же время, что и «Merlea Dan», но я ответил на ваш ответ :) – rosshump

+0

Нет проблем. Поблагодарите Мерле Дэн за более полный ответ, а @ karthikeyan за редактирование моей, чтобы «показать мои работы». – pbasdf

Смежные вопросы