UIPickerView для отображения различных веб-представлений - PullRequest
0 голосов
/ 18 февраля 2012

Я пытался управлять своим UIWebView с помощью UIPickerView, чтобы отображать разные файлы PDF. Но почему-то мой код не работает. Либо происходит сбой, если я выбираю определенную строку, либо отображается неверный PDF. Есть идеи?

#import "PickerViewTutorialViewController.h"

@implementation PickerViewTutorialViewController

@synthesize pickerView;

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self populateArray1];
    [self populateArray2];
}

- (void)populateArray1 {
    array1 = [[NSMutableArray alloc] init];
    [array1 addObject:@"1"];
    [array1 addObject:@"2"];
    [array1 addObject:@"3"];
    [array1 addObject:@"4"];
    [array1 addObject:@"5"];
    [array1 addObject:@"6"];
}
- (void)populateArray2 {
    array2 = [[NSMutableArray alloc] init];
    [array2 addObject:@"A"];
    [array2 addObject:@"B"];
    [array2 addObject:@"C"];
}


- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark -
#pragma mark picker view methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
    return 2;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if ([[array1 objectAtIndex:row] isEqual:@"1"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"2"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"3"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"4"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"5"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"6"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6C.pdf"]]]]; }
    }
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
    if (component == 0) {
        return [array1 count];
    }
    else {
        return [array2 count];
    }
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
    if (component == 0) {
        return [array1 objectAtIndex:row];
    }
    else {
        return [array2 objectAtIndex:row];
    }
}

@end

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Обратите внимание, что вы можете заменить весь код:

    if ([[array1 objectAtIndex:row] isEqual:@"1"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_1C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"2"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_2C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"3"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_3C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"4"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_4C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"5"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_5C.pdf"]]]]; }
    }
    if ([[array1 objectAtIndex:row] isEqual:@"6"]) {
        if ([[array2 objectAtIndex:row] isEqual:@"A"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6A.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"B"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6B.pdf"]]]]; }
        if ([[array2 objectAtIndex:row] isEqual:@"C"]) {
            stundenplan.scalesPageToFit = YES;
            [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Stundenplan_6C.pdf"]]]]; }
    }

На:

NSString *numberString = [array1 objectAtIndex:row];
NSString *letterString = [array2 objectAtIndex:row];
NSString *pathComponentString = [NSString stringWithFormat:@"Stundenplan_%@%@.pdf", numberString, letterString];
stundenplan.scalesPageToFit = YES;
[stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathComponentString]]]];

В первых двух строках (упрощенного кода) вы видите проблему:Если строка имеет значение 3 или больше, вы не можете вызвать [array2 objectAtIndex:row];, длина которого составляет всего 3.

Редактировать

Вы можете использовать метод:

- (NSInteger)selectedRowInComponent:(NSInteger)component;

Чтобы определить правильные индексы букв и цифр:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    NSString *numberString = [array1 objectAtIndex:[pickerView selectedRowInComponent:0]];
    NSString *letterString = [array2 objectAtIndex:[pickerView selectedRowInComponent:1]];
    NSString *pathComponentString = [NSString stringWithFormat:@"Stundenplan_%@%@.pdf", numberString, letterString];
    stundenplan.scalesPageToFit = YES;
    [stundenplan loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathComponentString]]]];
}
0 голосов
/ 18 февраля 2012

Прежде всего, ваш код падает из-за того, как вы обрабатываете выбор строки. Ваш второй массив объектов (array2) имеет всего 3 объекта (с индексами 0,1,2), но если вы выберете, например, 4-й объект в первом компоненте, вы попытаетесь получить доступ к объекту с индексом 3 в array2, так что вы получите исключение "вне границ".

Я бы посоветовал вам переписать вашу логику следующим образом:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

Вы должны использовать часть inComponent:(NSInteger)component для оптимизации вашего кода

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

...