2010-08-26 5 views
2

Я создал UITableViewCell в интерфейсе Builder, который я добавил UIImageView и UIButton для. Я дал UIButton выход и подключил его к IBAction с помощью сенсорного набора. Я предполагал, что это будет вызывать этот метод, так как все выглядело, как он подключил:IBAction из UIButton внутри UITableViewCell

- (IBAction)pressedCheckbox:(id)sender { 
    [sender setBackgroundImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
    NSLog(@"clicked check"); 

} 

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

Идеи о том, почему он не позволит мне щелкнуть по моей кнопке, которая находится в UITableViewCell?

EDIT:

Код для cellForRowAtIndexPath:

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     cell.editingAccessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 

    if (indexPath.section == 0) { 
     switch (indexPath.row) { 
      case 0: 
       cell = topCell; 
       break; 
      case 1: 
       cell = cell1; 
       break; 
     }//end switch 

    }//end if 

    return cell; 
} 

ответ

1

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (indexPath.section == 0) { 

      switch (indexPath.row) { 

       case 0: 

        return 26; 

        break; 

      }//end switch 

    }//end if 

    return tableView.rowHeight; <-- I just added this and it fixed the issue 

} 

Раньше я был только возвращает значение ячейки 0, так что это вызывало проблемы со всеми моими другими клетками

+0

Не возвращайте «44» - вместо этого верните таблицуView.rowHeight. Это, вероятно, 44, но вы никогда не знаете, может ли это измениться в будущем iOS. То же самое для «26» - получите что-то frame.size.height, если необходимо. –

+0

Спасибо за подсказку, я изменю это. –

0

Вы делаете это в IB? Возможно, стоит попробовать - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents (в методе loadView контроллера управления владельцем), чтобы узнать, является ли проблема ссылкой IB.

+0

Да, я это делаю в IB. –

+0

Нет, используя: [cell1Check addTarget: self action: @selector (нажалCheckbox :) forControlEvents: UIControlEventTouchUpInside]; тоже не работает. –

0

Вы имеете в виду, что это подкласс UITableViewCell? Вы уверены, что используете это вместо обычного UITableViewCell?

Перейдите к реализации метода cellForRowAtIndexPath и найдите строку, в которой вы создаете экземпляр ячейки. Убедитесь, что он создает экземпляр для любого вашего подкласса, и не UITableViewCell. Если вы смущены, отправьте код для вашего метода codeForRowAtIndexPath, чтобы мы могли его увидеть.

+0

Я отправил код. И нет, это не подкласс, а обычный UITableViewCell. –

+0

Ну ладно, так как вы добавили UIButton в ячейку? –

+0

Если вы делаете это программно, вы можете проверить это: http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/ uid/TP40007451-CH7-SW15 –

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