UIPickerView добавлен в uitableviewcontroller.view не будет вращаться - PullRequest
3 голосов
/ 07 января 2009

У меня есть UIPickerView в качестве подпредставления в UITableViewController, который я хочу сдвинуть вверх на месте при нажатии на определенную строку. Я реализовал необходимые методы dataSource и делегата, но представление выбора действует странно. Он действует так, как будто он механически заклинило, он не может вращаться должным образом, он просто немного двигается. Если я несколько раз попробую его раскрутить, то получу сообщение в консоли отладчика:

SendDelegateMessage: делегат не выполнен вернуться после ожидания 10 секунд. режим основного цикла: UITrackingRunLoopMode Если вы не были используя сенсорный экран для всего этого интервал (который может продлить это подождите), пожалуйста, сообщите об ошибке.

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

- (void)viewDidLoad {
     [super viewDidLoad];
     percentPicker  = [[UIPickerViewalloc] initWithFrame:CGRectMake(0,420, 320, 200)];
     percentPicker.delegate = self;
     percentPicker.dataSource = self;
     percentPicker.showsSelectionIndicator = YES;
     [self.view addSubview:percentPicker];
 }

- (void)viewWillAppear:(BOOL)animated {
     // sets the rows to the appropriate value
     // etc
}

- (void)startEditingPercentage {
     [UIView beginAnimations :nilcontext:NULL];
     [UIView setAnimationBeginsFromCurrentState:YES];
     [UIViewsetAnimationDuration:kPickerAnimationDuration ];
     percentPicker.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, -220.0);
     [UIViewcommitAnimations];
 }

- (void)stopEditingPercentage {
    NSLog(@"stopEditingPercentage");
    [UIView beginAnimations :nilcontext:NULL];
    [UIViewsetAnimationBeginsFromCurrentState:YES];
    [UIViewsetAnimationDuration:kPickerAnimationDuration];
    percentPicker.transform = CGAffineTransformIdentity;
    [UIView commitAnimations];
}

#pragma mark UIPickerView delegate and dataSource methods

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return10;
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 
    return44;
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *retval = (UILabel *)view;
    if (!retval) {
        retval= [[UILabel newLabelWithPrimaryColor :[UIColorblackColor ] selectedColor:[ UIColor blackColor] fontSize:22bold:YEStransparent:YES] autorelease];
    }
    retval.frame = CGRectMake(0, 0, 44, 44);
    retval.textAlignment = UITextAlignmentCenter;
    retval.backgroundColor = [UIColor clearColor];
    retval.text = [NSStringstringWithFormat:@"%i", row];
    if (component > 1 ) {
        // rows 2 and 3 are decimal, white on black
        retval.backgroundColor = [UIColor blackColor];
        retval.textColor = [UIColor whiteColor];
    }
    return retval;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSString *selectedValue;
    selectedValue= [NSString stringWithFormat:@"%i%i.%i%i" ,[percentPickerselectedRowInComponent :0], [ percentPickerselectedRowInComponent: 1], [percentPickerselectedRowInComponent:2], [percentPickerselectedRowInComponent:3]];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    NSString *trimmedValue = [[formatter numberFromString:selectedValue] stringValue];
    percentValue.text = trimmedValue;
    [formatter release];
}

Как вы видите, я использую свойство transform для перемещения палитры внутрь и наружу (вниз) моего основного вида; Методы startEditing и stopEditing запускаются выбором в представлении teble. Тем не менее, для целей отладки я исключил эти переходы и оставил средство выбора поверх таблицы, но ничего не изменилось. Я также прокомментировал метод didSelect, но это также ничего не изменило. Кстати, тот же самый строительный код вида выбора ворква в другом представлении того же приложения. Любое предложение? Cheers,

1 Ответ

1 голос
/ 07 января 2009

Вы на самом деле не добавляете средство выбора в UITableView, используя код в viewDidLoad. UITableView может иметь только элементы управления / строки в UITableViewCells, и они указываются в методе cellForRowAtIndex. Мы не можем добавлять элементы управления в UITableView, как мы делаем в UIView.

Попробуйте вместо этого использовать подкласс UIView и добавьте UITableView и средство выбора к этому подклассу UIView.

Если вы хотите использовать только подкласс UITableViewController, создайте пользовательскую ячейку и добавьте средство выбора в эту пользовательскую ячейку. Но тогда вы не сможете скрыть / показать эту ячейку, если добавите ее статически. Тогда вам придется использовать reloadData. Я бы предложил использовать подкласс UIView.

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