Цель C: Как создать пользовательские / статические ячейки табличного представления через код - PullRequest
4 голосов
/ 18 мая 2011

Я пытаюсь создать 3 ячейки табличного представления, используя код (без пера).У меня возникли проблемы с получением кода для работы.Я предполагаю, что не понимаю подход правильно.Кто-нибудь может посоветовать мне, как правильно идти вперед?Любая помощь по этому вопросу будет принята с благодарностью!

Спасибо!

Zhen Hoe

Мой фрагмент кода выглядит следующим образом:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     
{
    // Return the number of rows in the section.
    return 3;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";
    int row = [indexPath row];

    UITableViewCell *startCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    UITableViewCell *durationCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    UITableViewCell *radiusCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

    startCell.textLabel.text = @"Start:";
    durationCell.textLabel.text = @"Duration:";
    radiusCell.textLabel.text = @"radius";


    if (row == 0)
    {
        return startCell;
    }
    else if (row == 1)
    {
        return durationCell;
    }

    return radiusCell;
}

РЕДАКТИРОВАТЬ (19 /05/11)

После просмотра ваших ответов я все еще не могу отобразить ни одной ячейки в своем табличном представлении.Это связано с тем, как я инициализировал свою таблицу?

//Initialization
UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.settingsView.frame.size.height)
                                                style:UITableViewStyleGrouped];

self.tableView = tv;

[self.view addSubview:tableView];

После чего у меня появляется анимация для расширения tableView

[UIView animateWithDuration:0.3 animations:^{

        [self.tableView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-self.picker.frame.size.height)];
}];

Ребята, видите ли вы какие-либо проблемы с вышеупомянутым?Что-нибудь, что вызывает мой показ ячеек, терпит неудачу?

Спасибо!

Жен

Ответы [ 4 ]

6 голосов
/ 18 мая 2011

В вашем коде инициализации UITableView я не вижу, где вы устанавливаете представление таблицы delegate и dataSource.Это, безусловно, часть проблемы.В соответствии с документацией Apple :

объект UITableView должен иметь объект, который действует как источник данных, и объект, который действует как делегат;обычно эти объекты являются либо делегатом приложения, либо, чаще, пользовательским объектом UITableViewController.Источник данных должен принять протокол UITableViewDataSource, а делегат должен принять протокол UITableViewDelegate.Источник данных предоставляет информацию, необходимую UITableView для построения таблиц, и управляет моделью данных, когда строки таблицы вставляются, удаляются или переупорядочиваются.Делегат предоставляет ячейки, используемые таблицами, и выполняет другие задачи, такие как управление дополнительными представлениями и выборами.

Вот что вы можете попробовать сделать:

//Initialization
UITableView *tv = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.settingsView.frame.size.height)
                                                style:UITableViewStyleGrouped];

// assuming that your controller adopts the UITableViewDelegate and
// UITableViewDataSource protocols, add the following 2 lines:

tv.delegate = self;
tv.dataSource = self;


self.tableView = tv;

[self.view addSubview:tableView];
2 голосов
/ 18 мая 2011

Не создавайте более одной ячейки одновременно и используйте механизм повторного использования через dequeueReusableCellWithIdentifier:.Вы можете настроить ячейки (данные фида из модели и т. Д.) В соответствии с их индексным путем.

- (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 cell...
    switch(indexPath.row) { // assuming there is only one section
        case 0:
            cell.textLabel.text = @"Start:";
            break;
        case 1:
            cell.textLabel.text = @"Duration:";
            break;
        case 2:
            cell.textLabel.text = @"radius";
            break;
        default:
            break;
    }

    return cell;
}
1 голос
/ 18 мая 2011

Вы должны сделать self.view = self.tableView;UITableViewController они одинаковы.И вы установили источник данных и делегата?

1 голос
/ 18 мая 2011

Метод tableView: cellForRowAtIndexPath: вызывается один раз для каждой строки в табличном представлении.Вам не нужно создавать 3 ячейки каждый раз.Создайте одну ячейку для каждого вызова этого метода и верните ее.Как то так -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";
    int row = [indexPath row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

}


    switch (row) {
        case 1:{
            cell.textLabel.text = @"Start";
            break;
        }
        case 2:{
            cell.textLabel.text = @"Duration";
            break;
        }

        default:
            cell.textLabel.text = @"radius";
            break;
    }
    return cell;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...