【问题标题】:UIPickerView to display different WebViewsUIPickerView 显示不同的 WebView
【发布时间】:2012-02-18 13:55:34
【问题描述】:

我尝试使用 UIPickerView 控制我的 UIWebView,以显示不同的 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

【问题讨论】:

    标签: iphone objective-c ios5 xcode4.2 uipickerview


    【解决方案1】:

    请注意,您可以替换所有代码:

        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]]]];
    

    在(简化代码的)前两行中,您会看到问题:当 row 为 3 或更大时,您不能调用长度仅为 3 的 [array2 objectAtIndex:row];

    编辑

    可以使用方法:

    - (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]]]];
    }
    

    【讨论】:

    • 谢谢,这很有帮助,但仍然不能解决我的主要问题。我知道问题出在哪里,但我不知道如何让它工作......
    【解决方案2】:

    首先,由于您处理行选择的方式,您的代码会崩溃。 您的第二个对象数组(array2)只有 3 个对象(索引为 0,1,2),但如果您选择例如第一个组件中的第 4 个对象,您将尝试访问 array2 中索引 3 处的对象,因此您将获得“越界”异常。

    我建议你用这种方法重写你的逻辑:

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

    您应该使用其中的inComponent:(NSInteger)component 部分来优化您的代码

    我希望这会有所帮助。

    【讨论】:

    • 这意味着此代码只能显示“1A”、“2B”和“3B”。此外,没有理由让你有 18 行 stundenplan.scalesPageToFit = YES;。仅一行就足够了,即在方法的顶部。
    • 你可以直接说你希望有人为你写完整的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多