2015-08-28 4 views
0

У меня есть следующий код для создания моих ячеек в UITableView.Первая ячейка UITableView пуста (TableView в UIView)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 5; 
} 

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

    if (nil == cell) { 
     [tableView registerNib:[UINib nibWithNibName:@"FutureAppointmentsViewCell" bundle:nil] forCellReuseIdentifier:CellIdentifier]; 
     cell = [[FutureAppointmentsViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:CellIdentifier]; 
    } 

    NSUInteger position = indexPath.row; 
    cell.appointmentDescription.text = [NSString stringWithFormat:@"%lu. %@. %@", (unsigned long)position, @"Steve", @"10/03/"]; 

    return cell; 
} 

Проблемы есть, первая ячейка таблицыView отсутствует. Он должен начинаться с 0. Steve, но вместо этого начинается с 1. Steve. Кроме того, есть только 4 элемента в списке вместо 5.

enter image description here

Когда я устанавливаю точку останова в коде, первая ячейка равна нулю.

Кто-нибудь знает, что может случиться?

+0

Возможно, ваш просмотр _header_ охватывает его? попробуйте вытащить табличное представление, чтобы увидеть, находится ли камера под _something_, может быть? – holex

ответ

3

Put эта строка кода:

[tableView registerNib:[UINib nibWithNibName:@"FutureAppointmentsViewCell" 
             bundle:nil] 
forCellReuseIdentifier:CellIdentifier]; 

В viewDidLoad. Он не принадлежит cellForRowAtIndexPath. Как только вы это сделаете, вам больше не нужно проверять, является ли ячейка нулевой.

Изменение cellForRowAtIndexPath:

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


    NSUInteger position = indexPath.row; 
    cell.appointmentDescription.text = 
    [NSString stringWithFormat:@"%lu. %@. %@", 
    (unsigned long)position, @"Steve", @"10/03/"]; 

    return cell; 
} 
+0

Извините, я забыл упомянуть в своем вопросе, что код, над которым я работаю, был сделан с представлениями, поэтому у меня нет viewDidLoadMethod для работы. – pls

+0

Затем введите его в метод init. Переместите его из cellForRowAtIndexPath. И BTW вы действительно должны использовать ViewControllers. –

+0

Я хочу попробовать. Я унаследовал эту базу кода, поэтому у меня нет выбора. Вам не нужно убеждать меня использовать View Controllers :-). – pls

1

Я думаю, что у меня была аналогичная проблема, когда я использую UITableView внутри UIView и инициализировать его в методе инициализации.

Я не смог найти хорошее объяснение этого поведения, но я нашел для этого сложное решение - я перезагрузил UITableView экземпляр от UIViewController в методе viewDidAppear.

Я также хотел бы знать, почему UITableView не рисует все UITableViewCell.

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