UITableView cellforrowatindexpath не вызывается - PullRequest
7 голосов
/ 21 декабря 2009

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

В моем приложении у меня есть несколько представлений (т.е. .xib-файлов). При нажатии кнопки в главном представлении (CouponWebsiteViewController.Xib) приложение должно загрузить второе представление (BrowseList.Xib), которое содержит UITable, и мне нужно заполнить этот UITable некоторыми данными. Я написал следующий код для заполнения данных в файле BrowseList.m:

- (void) viewDidLoad{
    arrayData = [[NSArray alloc] init];
    arrayData = [arrayData arrayByAddingObject:@"dfsgdf"];
    arrayData = [arrayData arrayByAddingObject:@"aaaaaa"];
    self.lblNewScreen.text = [arrayData objectAtIndex:0];
    [super viewDidLoad];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [arrayData count];
}

// Customize the appearance of table view cells.
- (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];
    }

    NSString *cellValue = [arrayData objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
    [tableView setEditing:YES animated:YES];
    return cell;
}

Но это не заполнение данных в таблице, когда я отлаживал этот код, я обнаружил, что он не выполняет метод cellForRowAtIndexPath, а отлаживает методы numberOfRowsInSection и numberOfSectionsInTableView.

Но интересно то, что когда я пишу тот же код на CouponWebsiteViewController.m (т.е. в главном представлении), тогда он заполняет данные в таблице.

Суть в том, что этот код работает нормально на главном экране, но не работает для других видов.

Может ли кто-нибудь сказать мне, что мне не хватает, или каким-либо другим способом заполнить UITable в представлениях, отличных от основного представления.

Спасибо заранее. Гаурав

Ответы [ 12 ]

0 голосов
/ 11 сентября 2012

Если изменяемый массив или массив, который вы используете для заполнения содержимого ячейки, установлен в качестве свойства в вашем заголовочном файле. затем убедитесь, что вы всегда используете

self.yourArray = [[NSMutableArray alloc] init];
[self.yourArray addObject:@"Object1"];

и затем, чтобы получить счетчик в numberOfRowsInSection, вам необходимо получить к нему доступ:

return [self.yourArray count];

Это очень похоже на указатель this, который вы используете для ссылки на переменные вашего экземпляра. И да, конечно, вы также должны иметь в виду, если вы установили dataSource и делегировали UITableView владельцу файла. Также, что вы включили UITableViewDelegate и UITableViewDataSource в заголовочный файл viewController.

Надеюсь, это поможет вам. Удачи. Удачного кодирования! Ура !!

0 голосов
/ 04 мая 2012

Убедитесь, что вы задали табличное представление в качестве делегата?

Если у вас есть UITableViewController, вам это нужно в viewDidLoad:

[self.tableView setDelegate:self];

Если у вас есть другой тип контроллера представления, просто сделайте UITableView IBOutlet, сделайте соединения с владельцем файла для tableViewDelegate и tableViewDataSource, затем сделайте это в viewDidLoad:

[self.myTableProperty setDelegate:self];

Также убедитесь, что в вашем файле .h соблюдаются протоколы UITableViewDelegate и UITableViewDataSource, если контроллер представления не является UITableViewController

Приветствия

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