cellForRowAtIndexPath не вызывается - PullRequest
2 голосов
/ 02 декабря 2011

У меня есть представление, которое добавляет другое представление сверху таким образом:

- (void)showAreaEditView {

    NSLog(@"SHOWING AREA EDITOR VIEW");

    if (self.thisAreaEditorView == nil) {

        // Create View
        AreaEditorView *tmpViewController = [[AreaEditorView alloc] initWithNibName:@"AreaEditorView" bundle:nil];
        self.thisAreaEditorView = tmpViewController;
        [tmpViewController release];

        // Hide the back button
        self.thisAreaEditorView.navigationItem.hidesBackButton = YES;

    }

    self.thisAreaEditorView.myInspectionID = self.myInspectionID;
    self.thisAreaEditorView.loggedIn = loggedIn;
    self.thisAreaEditorView.loggedInGroup = loggedInGroup;

    // Slide view up

    [self.view addSubview:thisAreaEditorView.view];


    CGRect endFrame = CGRectMake(self.view.frame.size.width/2 - thisAreaEditorView.view.frame.size.width/2,
                                 self.view.frame.size.height/2 - thisAreaEditorView.view.frame.size.height/2, 
                                 thisAreaEditorView.view.frame.size.width, 
                                 thisAreaEditorView.view.frame.size.height);

    CGRect startFrame = endFrame; // offscreen source

    // new view starts off bottom of screen
    startFrame.origin.y += self.view.frame.size.height;
    self.thisAreaEditorView.view.frame = startFrame;

    // start the slide up animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.6];   
    thisAreaEditorView.view.frame = endFrame; // slide in
    [UIView commitAnimations];

}

Я уверен, что вы можете просто игнорировать слайд, я чувствую, что addSubview имеет значение.

Тогда в этомAreaEditor у меня есть вид со столом и кнопками и тому подобное. UITableView делегат / источник данных отправляется Владельцу файла как обычно.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSLog(@"numberOfRowsInSection returning %d", [tableData count]);
    [tableData count];

}

Эта функция numberOfRowsInSection возвращает 4

- (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];
    }

    // Configure the cell...
    NSString *thisText =  [tableData objectAtIndex:indexPath.row];
    cell.textLabel.text = thisText;

    NSLog(@"looking at cell %d text:%@", indexPath.row, thisText);

    return cell;

}

Но cellForRowAtIndexPath никогда не вызывается.

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

Я пробовал [bigTable reloadData] и т. Д., Таблица просто никогда не заполняется и не регистрируется в выходных данных функции.

Заранее спасибо.

Ответы [ 5 ]

9 голосов
/ 02 декабря 2011

Возможно, вы только что отредактировали это, если так, извините, но похоже, вы забыли вернуть счетчик tableData.

3 голосов
/ 02 декабря 2011

Кажется, вам не хватает UITableViewDelegate.

Если вы используете Interface Builder, щелкните правой кнопкой мыши на выходе табличного представления и перетащите и delegate, и datasource в File's Owner.

И если вы не используете Interface Builder, добавьте его там, где вы инициализируете свой tableView

bigTable.delegate = self;
bigTable.dataSource = self;

Не забудьте импортировать протоколы UITableViewDelegate и UITableViewDataSource, как говорит Srikar.

Надеюсь, это поможет.

Ура!

1 голос
/ 05 июня 2018

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath также не вызывается, когда высота таблицы не установлена.

0 голосов
/ 16 октября 2012

Это старая ссылка, но я хотел обновить ее, добавив информацию о том, как я решил эту проблему. Для меня проблема заключалась в том, что массив для заполнения таблицы содержал 0 строк, поэтому cellForRowAtIndexPath никогда не вызывался. Убедитесь, что в массиве, который вы используете для заполнения таблицы, есть данные.

0 голосов
/ 02 декабря 2011

Возможно, вы не установили делегата tableView как self или источник данных как self. Добавьте этот код и посмотрите, работает ли он сейчас -

[tableView setDelegate:self];
[tableView setDataSource:self];

Также в вашем заголовочном файле наследуются эти делегаты - UITableViewDelegate, UITableViewDataSource

@interface yourViewController: UIViewController <UITableViewDelegate, UITableViewDataSource>

Надеюсь, это поможет.

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