TableView ---> DetailView - PullRequest
       1

TableView ---> DetailView

0 голосов
/ 16 ноября 2011

Я хотел бы, чтобы названия организаций были указаны на TableView, а дополнительную информацию можно найти на DetailView. Но я не знаю, где ошибка, DetailView не найти мою информацию. Вот код didSelectRow:

TableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case 0:
            return 2;
            break;
        case 1:
            return 2;
            break;
        case 2:
            return 2;
            break;
    }
    return 0;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSString *sectionHeader = nil;    if(section == 0) {
        sectionHeader = @"Red Wine";
    }
    if(section == 1) {
        sectionHeader = @"White Wine";
    }
    if(section == 2) {
        sectionHeader = @"Sparkling Wine";
    }
    return sectionHeader;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        [cell.textLabel setNumberOfLines:3];
    }
    switch (indexPath.section) {
        case 0: 
            switch (indexPath.row) {
                case 0:
                    cell.textLabel.text = @"Black Wattle Mt Benson Merlot 2008";
                    cell.detailTextLabel.text = @"Mt Benson, South Australia.";
                    break;
                case 1:
                    cell.textLabel.text = @"Two Hands Canny Butcher Barossa Valley Shiraz Grenache Mataro 2009";
                    cell.detailTextLabel.text = @"Barossa Valley, South Australia.";
                    break;
            }
            break;
        case 1: 
            switch (indexPath.row) {
                case 0:
                    cell.textLabel.text = @"Amberton Lizard Sauvignon Blanc Semillon 2011";
                    cell.detailTextLabel.text = @"South Eastern Australia.";
                    break;
                case 1:
                    cell.textLabel.text = @"Vasse Felix Margaret River Chardonnay Margaret River";
                    cell.detailTextLabel.text = @"Western Australia.";
                break;          }
            break;
        case 2: 
            switch (indexPath.row) {
                case 0:
                    cell.textLabel.text = @"Janisson Fils Brut Non Vintage Champagne";
                    cell.detailTextLabel.text = @"Champagne, France.";
                    break;
                case 3:
                    cell.textLabel.text = @"Francois Montand Brut Blanc De Blancs NV";
                    cell.detailTextLabel.text = @"Premium French sparkling vineyard areas.";
                    break;
            }
            break;
    }
    return cell;
}

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *ViewController = [[DetailViewController alloc] init];

    ViewController.Wine = [indexPath section];

    [self.navigationController pushViewController:ViewController animated:YES];
}

DetailView:

- (void)viewDidLoad{    
[super viewDidLoad];
switch (Wine) {
    case 0: 
        switch (Wine) {
            case 0:
                self.navigationItem.title = @"Black Wattle Mt Benson Merlot 2008";
                WineTextView.text = @"Alcohol: 14.5%\n"
                "\n"
                "Foods: Pan grilled fillet mignon with buttered mushrooms and silky mashed potatoes.\n";
                break;
            case 1:
                self.navigationItem.title = @"Two Hands Canny Butcher Barossa Valley Shiraz Grenache Mataro 2009";
                WineTextView.text =  @"Alcohol: 14.2%\n"
                "\n"
                "Foods: Enjoy with beef stew and winter vegetables.\n";
                break;

            default:
                break;
        }
        break;

    case 1: 
        switch (Wine) {
            case 0:
                self.navigationItem.title = @"Amberton Lizard Sauvignon Blanc Semillon 2011";
                WineTextView.text = @"Alcohol: 14.5%\n"
                "\n"
                "Foods: Pan grilled fillet mignon with buttered mushrooms and silky mashed potatoes.\n";
                break;
            case 1:
                self.navigationItem.title = @"Vasse Felix Margaret River Chardonnay Margaret River";
                WineTextView.text = @"Alcohol: 12%\n"
                "\n"
                "Foods: Enjoy with Chinese roast duck salad.\n";
                break;
            default:
                break;
        }
        break;

    case 2: 
        switch (Wine) {
            case 0:
                self.navigationItem.title = @"Janisson Fils Brut Non Vintage Champagne";
                WineTextView.text = @"Alcohol: 12%\n"
                "\n"
                "Foods: Ideal aperitif style, to accompany canapés and hors doeuvres.\n";
                break;
            case 1:
                self.navigationItem.title = @"Francois Montand Brut Blanc De Blancs NV";
                WineTextView.text = @"Alcohol: 12%\n"
                "\n"
                "Foods: Apéritif, fish, and creamy dishes..\n";
                break;
            default:
                break;
        }
    default:
        break;
}

1 Ответ

0 голосов
/ 16 ноября 2011

Как минимум ваш код в DetailView имеет два вложенных оператора switch, которые включают одну и ту же переменную Wine. Это, например, приводит к тому, что «Двуручный мясник в долине Баросса» будет недоступен, так как Wine не может быть равным нулю и единице одновременно. Возможно, вы намеревались использовать две переменные и сохранить раздел и строку для использования в DetailView.

В любом случае я бы порекомендовал убрать дублирование данных и хранить все в одном месте. Если вы, например, сохранили всю свою информацию о вине в NSArray, вы можете использовать этот массив для извлечения данных без использования большого оператора case. Это также позволило бы обменять фиксированный список на что-то, полученное из локальной базы данных или даже из Интернета позже.

Если вы, например, создали свой собственный класс WineInformation, который содержит свойства для каждого аспекта вина (название, содержание алкоголя, рекомендуемые продукты), вы можете просто передать объект WineInformation для выбранной строки вашему DetailView, который затем отображает подробную информацию. Таким образом, вам не нужно обрабатывать индексные пути или что-то подобное в DetailView и просто сконцентрироваться на отображении врученного вина.

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