Вопрос по ios5, uidatepicker, iphone, ios – Пользовательский iOS UIDatepicker, использующий UIAppearance

8

Новое приложение тревоги UNIQLO имеет обычайUIDatePicker:

custom

И я хочу создать свой собственныйUIDatePicker.

Я пытался изменить внешний вид DatePicker, но искалUI_APPEARANCE_SELECTOR вUIDatePicker возвращаетсяnothing.

Это означает, что невозможно изменить какие-либо значения в соответствии с документами:

To support appearance customization, a class must conform to the UIAppearanceContainer protocol and relevant accessor methods must be marked with UI_APPEARANCE_SELECTOR.

Как можно изменить мойUIDatePickerвнешний вид?

пожалуйста, извините огромное изображение .. daidai
Вы хотите только 2 компонента в UIDatePicker или просто нужен белый шрифт текста в качестве настройки? Kuldeep
Пожалуйста, посмотрите, я настроил внутренний вид сборщика, вы можете изменить код в соответствии с требованиями. Kuldeep
Настроить как можно больше: шрифт, цвет, все. daidai
Вы получаете какие-либо проблемы в настройке сборщиков & apos; довольны методом я иду? Kuldeep

Ваш Ответ

8   ответов
0

[datePickerView setValue:self.pickerLabelColor forKey:@"textColor"];

И изменить шрифт я знаю только так:

Создать категориюUIFont+System и поместите этот код внутри

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
    + (UIFont *)systemFontOfSize:(CGFloat)fontSize
    {
        return [UIFont fontWithName:fontName size:fontSize];
    }
#pragma clang diagnostic pop

Это также установит шрифты в других местах вашего приложения (заменив системный шрифт вашим шрифтом).

0

используя два UIScrollViews, один для часов и один для минут. Вам просто нужно выяснить contentOffset каждого просмотра прокрутки, когда он перестал двигаться, что на моей голове будет выглядеть так:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
  if (!decelerate) {
    // get the offset here
  }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  // also get the offset here
}

Возьмите значение смещения содержимого и переведите его в значение часа и значение минуты, возможно, разделив позицию y смещения содержимого на 24 или 60 соответственно. Вам нужно будет сделать собственное произведение искусства самостоятельно.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

UIAppearance протокол был представлен, который позволяет настроить несколько элементов пользовательского интерфейса. UIDatePicker соответствует этому протоколу, так что это, вероятно, самый простой способ сделать это. То есть, если вы готовы поддерживать только пользователей iOS 5. Вариант Мэтью, вероятно, был бы следующим лучшим вариантом, который также должен работать со старыми версиями iOS.

Error: User Rate Limit Exceeded daidai
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded daidai
Error: User Rate Limit ExceededUIDatePickerError: User Rate Limit Exceeded
3

UIDatePicker появляется.

Приведенный вами пример, на мой взгляд, является сложной настройкой простогоUIPickerView с двумя столбцами и, вероятно, имитируемой бесконечной прокруткой (как это делает Apple в средстве выбора даты, и это довольно просто реализовать).

Вы можете изменить немногоUIDatePicker сквозьUIAppearance прокси, как видно в этом примере:

UIDatePicker *picker = [UIDatePicker appearance];
picker.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.3];

UIView *view;
view = [UIView appearanceWhenContainedIn:[UITableView class], [UIDatePicker class], nil];
view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

UILabel *label = [UILabel appearanceWhenContainedIn:[UITableView class], [UIDatePicker class], nil];
label.font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
label.textColor = [UIColor blueColor];

Используя этот фрагмент кода в начале приложения (просто попробуйте), вы можете изменить аспект только пары основных компонентов средства выбора даты.

Этикеткиimpossible настроить (и этот тестовый код доказывает это); по-видимому, они меняются в аспекте каждый раз, когда вы поворачиваете столбец, так как они помещаются в пользовательскийUITableView контроллер.

Чтобы полностью изменить эти представления, вам, вероятно, следует работать с частными API от Apple, что в конечном итоге приведет к тому, что ваше приложение будетrejected.

Если вам просто нужен пользовательский сборщик часов и минут (как показано на скриншоте), полная настройка внешнего вида доступна только при расширенииUIPickerView класс или назначение соответствующего делегатаUIPickerView пример.

Сквозь

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

В методе делегата вы можете сделать так, чтобы отдельный элемент представления выбора отображался так, как вы хотите. Затем вам нужно будет соответствующим образом обработать источник данных, чтобы сделать два компонента средства выбора практически бесконечными.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
25

Вы можете сделать довольно убедительную реплику самостоятельно, используя UIPickerView, а не используя UIDatePicker.

Поскольку UIDatePicker или UIPickerView не имеют UI_APPEARANCE_SELECTOR, и даже вы не можете «изменять содержимое UIDatePicker». внешний вид как UIControl и не имеющий делегата, поэтому он имеет свой собственный внешний вид, тогда как в случае UIPickerView вы можете изменить его содержимое & apos; внешний вид похож на UITableView.

#pragma mark -
#pragma mark UIPicker Delegate & DataSource

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2;
}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return 100;
}
//- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:  (NSInteger)component {
     //    return [NSString stringWithFormat:@"%d",row];
//}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

      UILabel *label= [[[UILabel alloc] initWithFrame:CGRectMake(30.0, 0.0, 50.0, 50.0)] autorelease];
      [label setBackgroundColor:[UIColor clearColor]];
      [label setTextColor:[UIColor blueColor]];
      [label setFont:[UIFont boldSystemFontOfSize:40.0]];
      [label setText:[NSString stringWithFormat:@"%d",row]];

      return label;
}

enter image description here

Проверь это.

-1

UITableViews это путь

UITableView это подвидUIScrollView, поэтому он обрабатывает следующее событие

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{

}

и, получив позицию, просто прокрутите стол к центру, используя следующий метод

[myTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

Надеюсь это поможет.

-1

в которых может использоваться UIDatePicker, включая метод выбора даты. Изучите эту ссылку developer.apple.com/library/ios/samplecode/UICatalog/. Также они реализовали стандартный переключатель и панель навигации, которая указана в последнем.

4

-(UIView *)pickerViews{

    return ([datePicker.subviews objectAtIndex:0]);
}

-(void)viewDidLoad{

    [super viewDidLoad];

    [[self pickerViews].subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%@ --- > %i",obj, idx);
    }];
}

Когда вы запустите свое приложение, оно отобразит все подпредставления datePicker на вашей консоли, просто выберите любой индекс и измените их один за другим.

измените viewDidLoad и вставьте этот код

UIView *background = (UIView *)[[self pickerViews].subviews objectAtIndex:0];
background.backgroundColor = [UIColor clearColor];

UIView *wheel2 = (UIView *)[[self pickerViews].subviews objectAtIndex:4];
wheel2.backgroundColor = [UIColor redColor];

UIView *wheel3 = (UIView *)[[self pickerViews].subviews objectAtIndex:11];
wheel3.backgroundColor = [UIColor redColor];

В этом случае я изменяю цвет фона индекса «0», «4», «11».

Похожие вопросы