2014-02-12 1 views
1

Мне никогда не приходилось использовать UIStepper, поэтому я решил попробовать.iOS: UIStepper в ячейках UITableView

И я попробовал его в ячейках таблицы. Ниже мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    UIStepper *stepper = [[UIStepper alloc] initWithFrame:(CGRect){{40, 40}, 20, 20}]; 
    [stepper addTarget:self action:@selector(stepperTapped:) forControlEvents:UIControlEventValueChanged]; 
    stepper.tag = indexPath.row; 
    stepper.stepValue = 1; 
    stepper.continuous = YES; 
    stepper.minimumValue = 0; 
    stepper.maximumValue = 10; 
    [cell.contentView addSubview:stepper]; 

    return cell; 
} 

Метод Действие:

- (void)stepperTapped:(UIStepper*)stepper 
{ 
    NSLog(@"sender tag: %li", (long)stepper.tag); 

    UITableViewCell *currentCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:stepper.tag inSection:0]]; 
    NSNumber *stepperValue = [NSNumber numberWithDouble:stepper.value]; 
    currentCell.textLabel.text = [NSString stringWithFormat:@"%f", stepper.value]; 
    [self.tableView reloadData]; 
} 

Am просто проверяет его с 4-х ячеек и 1 секции.

Выполняется, но шагомер только увеличивается один раз (0 -> 1 или 1 -> 0), он не будет подниматься до 10, что является максимальным числом, которое я установил.

Я проверил тот же код, что и в ячейке таблицы, и он отлично работает. От 0 до 10 и от 10 до 0, каждый шаг.

Этот небольшой эксперимент стоил мне 2 часа, пытаясь найти решение.

Может ли проблема возникнуть здесь?

ответ

3

Это прекрасно работает в Objective C - Xcode 6.4.

- (IBAction)itemsChange:(UIStepper *)sender{  
    double value = [sender value]; 
    CGPoint cursorPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cursorPosition]; 
    UITableViewCell *currentCell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    [currentCell.label setText:[NSString stringWithFormat:@"%d", (int)value]]; 
} 
0

Делай так,

Создать UIStepper только если ячейка равна нулю.

- (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell Identifier"; 

    UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     UIStepper *stepper = [[UIStepper alloc] initWithFrame:(CGRect){{40, 40}, 20, 20}]; 
    [stepper addTarget:self action:@selector(stepperTapped:) forControlEvents:UIControlEventValueChanged]; 
    stepper.tag = indexPath.row; 
    stepper.stepValue = 1; 
    stepper.continuous = YES; 
    stepper.minimumValue = 0; 
    stepper.maximumValue = 10; 
    [cell.contentView addSubview:stepper]; 
    } 

return cell; 
} 
+0

Я тоже об этом думал, но я хотел бы использовать прототипы. Будет ли это возможно? Благодарю. – Unheilig

+0

Хорошо, если вы это сделаете, он будет создавать каждый раз и установить значение как 1 правильно? – Surfer

+0

Пожалуйста, обратитесь к следующей ссылке http://stackoverflow.com/questions/11067334/uistepper-not-updating-the-corresponding-label – Surfer

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

  • Нет связанных вопросов^_^