Помогите сократить мой код в didSelectRowAtIndexPath в гораздо более простой код - PullRequest
0 голосов
/ 12 апреля 2011

Привет, разработчики! Я построил табличное представление, заполнил его объектами массива и реализовал код, когда пользователь щелкает объект внутри моего табличного представления, загружает собственный файл пера этого объекта, и я использую оператор if. (просто небольшая заметка, я заполнил свое табличное представление 40 объектами, потому что это столько, сколько у меня есть и нужно), поэтому я покажу только первые два оператора if, которые я создал в начале моего кода оператора if, так как у меня есть способ слишком много операторов if для всех 40 объектов в моем табличном представлении:

if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Title"]) {
    Title *titleLoad = [[Title alloc] initWithNibName:@"Title" bundle:nil];
    [self.navigationController pushViewController:titleLoad animated:YES];
    [titleLoad release];
    }
    else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Meta Description Tag"]) {
        MetaDescriptionTag *metaDescriptionTagLoad = [[MetaDescriptionTag alloc] initWithNibName:@"MetaDescriptionTag" bundle:nil];
        [self.navigationController pushViewController:metaDescriptionTagLoad animated:YES];
        [metaDescriptionTagLoad release];
    }
...

Вот и все, я не хочу быть дерзким, показывая все мои операторы if, так что да, этот код работает, каждый объект массива загружает свой отдельный файл nib (файл 40 nib 1 для каждого объекта массива) и каждый из эти файлы перьев похожи на веб-представления, представления изображений, текстовые поля и другие объекты. Считай меня сумасшедшим, но это единственный код, который я могу придумать прямо сейчас, так что, надеюсь, кто-нибудь поможет мне отредактировать этот код в гораздо более простой код, спасибо

1 Ответ

2 голосов
/ 12 апреля 2011

Если ваши значения в glossaryArray можно механически преобразовать в соответствующий класс / имя пера (например, удалив все пробелы), вы можете сделать что-то вроде этого:

NSString *className = [self classNameFromString:[glossaryArray objectAtIndex:indexPath.row]];
UIViewController *viewController = [[NSClassFromString(className) alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];

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

...