2013-04-03 7 views
2

У меня есть UITableView. Я создаю программно вместе с ячейками, который отображает список шрифтов, которые пользователь может выбрать, чтобы изменить шрифт, который они читают. Однако, нажав на ячейку в представлении таблицы, семейство шрифтов, отправленное обратно с делегатом, не является шрифтом, который отображается в ячейке. Однократное нажатие «Times New Roman» изменит его на Helvetica, а затем оно изменит его на Baskerville.При выборе ячейки в моем UITableView выбор кажется случайным

Вот соответствующий код:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Depending on which row (font) they selected, use the delegate to change the 
    // reading text to that font 
    switch (indexPath.row) { 
     case 0: 
      [self.delegate changeFontTo:@"Helvetica"]; 
      break; 
     case 1: 
      [self.delegate changeFontTo:@"Times New Roman"]; 
      break; 
     case 2: 
      [self.delegate changeFontTo:@"Baskerville"]; 
      break; 
     case 3: 
      [self.delegate changeFontTo:@"OpenDyslexic"]; 
      break; 
    } 
} 

И метод делегата:

- (void)changeFontTo:(NSString *)fontFamily { 
    self.textToReadLabel.font = [UIFont fontWithName:fontFamily size:self.textToReadLabel.font.pointSize]; 
} 

И если это помогает, вот метод делегата UITableView для создания строк:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"FontCell"; 

    FontCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

    int row = indexPath.row; 

    cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    cell.fontFamilyLabel.text = self.fonts[row]; 

    if ([self.fonts[row] isEqualToString:@"Helvetica"]) { 
     cell.fontFamilyLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0]; 
    } 
    else if ([self.fonts[row] isEqualToString:@"Times New Roman"]) { 
     cell.fontFamilyLabel.font = [UIFont fontWithName:@"Times New Roman" size:17.0]; 
    } 
    else if ([self.fonts[row] isEqualToString:@"Baskerville"]) { 
     cell.fontFamilyLabel.font = [UIFont fontWithName:@"Baskerville" size:17.0]; 
    } 
    else if ([self.fonts[row] isEqualToString:@"Dyslexic"]) { 
     cell.fontFamilyLabel.font = [UIFont fontWithName:@"OpenDyslexic" size:17.0]; 
    } 

    return cell; 
} 

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

+1

'tableView: didDeselectRowAtIndexPath:' вместо 'tableView: didSelectRowAtIndexPath:' может быть причиной этого. – Zen

ответ

1

Вы использовали didDeselectRowAtIndexPath вместо didSelectRowAtIndexPath в своем делегате.

0

Проверьте, не вызвано ли каким-либо способом имя метода того, что вы ожидаете от «didSelect», может быть случайно получено «didDeselect».

0

Похоже, вы используете didDeselect вместо didSelect.