Введите дроби в поле uitext из 3 UIPickers? - PullRequest
4 голосов
/ 23 мая 2011

Итак, я собираюсь вместо ввода десятичных знаков вводить целые числа и дроби в текстовом поле.Или выберите их из UIPicker.

Пример: футы, дюймы, дроби. (2 - 4 1/2).

Как лучше всего это сделать?Пожалуйста, будьте подробно в вашем ответе.Заранее спасибо!

Обновление: ОК, может быть, понадобится немного больше деталей.

Я собираюсь использовать средство выбора и хочу отобразить 5 строк следующим образом:

<Ft>    <In>
0 0  S  0 0  S  1/16
1 1  P  1 1  P  1/8
2 2  A  2 2  A  3/16
3 3  C  3 3  C  1/4 
4 4  E  4 4  E  5/16 
ect...all the way to 9, and to 15/16 for the fractions. (Note the space between Ft and Inches and title for row).

Хорошо, я смог заставить 3 сборщика отображать на экране то, что хотел, моя самая большая проблема - заставить его правильно отображаться в текстовом поле.Так что, как в примере выше, у ft есть свой собственный инструмент выбора, у дюймов - свой, а у фракций - свой. Как бы вы все три отобразили как «00ft 00 0 / 0in» в одном текстовом поле?ОБНОВЛЕНИЕ: приведенный ниже код верен, убедитесь, что вы создали IBOutlet для вашего UIView, который содержит средства выбора, и подключили его в IB.

.m файл

feetArray = [[NSMutableArray alloc] init];
for(int feet = 0; feet <= 9; feet ++){ 
    NSString *feetString = [NSString stringWithFormat:@"%d%", feet];
    [feetArray addObject:feetString]; // Add the string.
}    

inchArray = [[NSMutableArray alloc] init];
for(int inch = 0; inch <= 12; inch ++){ 
    NSString *inchString = [NSString stringWithFormat:@"%d%", inch];
    [inchArray addObject:inchString]; // Add the string.
}

fractionArray = [[NSMutableArray alloc] init];
for(int frac = 0; frac <= 15; frac ++){ 
    NSString *fractionString = [NSString stringWithFormat:@"%d/16", frac];
    [fractionArray addObject:fractionString]; // Add the string.
}

}


//How many rows in each Picker.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
if (pickerView.tag == 1) {
    return 2;
}
if (pickerView.tag == 2) {
    return 2;
}

return 1;
}

//Selects array for each picker.
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

if (pickerView.tag == 1) {

    return [feetArray count];
}
if (pickerView.tag == 2) {

    return [inchArray count];
}

return [fractionArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

if (pickerView.tag == 1) {
    return [feetArray objectAtIndex:row];
}
if (pickerView.tag == 2) {
    return [inchArray objectAtIndex:row];
}
    return [fractionArray objectAtIndex:row];
}

//Formats the textfield based on the pickers.
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSString *result = [feetArray objectAtIndex:[feetPicker selectedRowInComponent:0]];

result = [result stringByAppendingFormat:@"%@ft", [feetArray objectAtIndex:[feetPicker selectedRowInComponent:1]]];
result = [result stringByAppendingFormat:@" %@", [inchArray objectAtIndex:[inchesPicker selectedRowInComponent:0]]];
result = [result stringByAppendingFormat:@"%@", [inchArray objectAtIndex:[inchesPicker selectedRowInComponent:1]]];
result = [result stringByAppendingFormat:@" %@in", [fractionArray objectAtIndex:[fractionPicker selectedRowInComponent:0]]];

RiseTextField.text = result;
}

Ответы [ 3 ]

3 голосов
/ 28 мая 2011

Установив UIPickerView объект как inputView, вам не нужно беспокоиться о вводе текста. Прикосновение к текстовому полю вызовет выбор и сделает ввод ограниченным так, как вы этого хотите. Вы можете подкласс или установить их прямо в вашем контроллере. Я настроил его как подкласс here. Это грубая реализация того, что вам нужно, как я понимаю. Вы можете посмотреть, поможет ли это.

2 голосов
/ 27 мая 2011

Я бы посоветовал использовать средство выбора, это намного проще, чем ввод дробей, и предотвратит ввод неправильных дробей.

Есть два способа получить дроби в ваш UIPicker, используйте pickerView: titleForRow: forComponent: метод вашего делегата UIPicker для выдачи дроби в виде строки.С этой функцией вы можете использовать символы дроби UTF8, такие как ¼.

Если не дает достаточной гибкости.Вы можете создавать изображения фракций и помещать изображения в средство выбора, используя pickerView: viewForRow: forComponent: reusingView: метод вашего делегата.

Документация предоставит вам много информации!Удачи!

0 голосов
/ 27 мая 2011

Звучит так, будто вы хотите что-то вроде указателя даты с несколькими колесами для выбора каждой части расстояния.К сожалению, нет способа сделать это.У вас есть 2 варианта, хотя.Простой вариант - использовать несколько сборщиков рядом друг с другом.Это не будет выглядеть одинаково, но это просто.Более сложный вариант - создать его с помощью UIScrollViews и стилизовать его так, чтобы он выглядел так, как вам нужно.

...