1

我有 UIViewController 一个带有许多 UINavigationController 的标签栏。标签栏是以编程方式创建的。当我单击第一个 UITabItem 时,它会显示一个 UITable,当我再次单击它时,它会显示地图,以便我可以在它们之间切换。UITable 和 MKMapView 在同一个视图中,我使用 sethidden yes 或 no 在它们之间切换。问题是这不起作用,我找到了原因,但我不明白为什么会发生在这里是执行隐藏和显示的函数的代码:

    -(void) showMap
    {
        fieldsTableView.hidden = YES;
        [mapView setHidden:NO];
    }
    -(void) showList
    {
        fieldsTableView.hidden = NO;
        mapView.hidden = YES;
    }

这是调用这些方法的代码:

    -(void) showFieldsView
    {
        @try 
        {
            if(self.fieldsViewController == nil) 
            {
                self.fieldsViewController = [[FieldsViewController alloc] initWithNibName:@"FieldsView" bundle:nil];
            }
            if(currentViewController == nil)
            {
                [self showFieldsListView];
                currentViewController = fieldsNavController;

            }

            NSString *viewtype = [[NSString alloc] initWithString:[(UITabBarItem *)[self.tabBar.items objectAtIndex:0] title]];
            if(currentViewController == self.fieldsNavController)
            {
                if (viewtype == @"List")
                {

                    [(UITabBarItem *)[self.tabBar.items objectAtIndex:0] setTitle:@"Map"];
                    [(UITabBarItem *)[self.tabBar.items objectAtIndex:0] setImage:[UIImage imageNamed:@"map.png"]];
                    [fieldsViewController showMap];
                }
                else
                {

                    [self.fieldsViewController showList];
                    [(UITabBarItem *)[self.tabBar.items objectAtIndex:0] setTitle:@"List"];
                    [(UITabBarItem *)[self.tabBar.items objectAtIndex:0] setImage:[UIImage imageNamed:@"list.png"]];
                }
            }
            else
            {
                [self showFieldsListView];
                currentViewController = self.fieldsNavController;

            }
            [viewtype release];
        }
        @catch (NSException *exception) {
            NSLog(@"Exception in tabViewControlelr showFieldsView \nDescription %@", [exception description]);
        }

    }
    - (void) showFieldsListView {
        [self.fieldsNavController viewWillAppear:YES];
    [self.fieldsNavController.view addSubview:tabBar];
        [self.view addSubview:self.fieldsNavController.view];
    }

我做了一个 NSLOG,这是我发现的:当调用 showMap 或 showList 函数时,它被调用并且内部完成了,但是属性没有被访问,它显示 NULL(我试图显示另一个字符串属性,它显示NULL) 这里是声明:

    UITableView * fieldsTableView;
    MKMapView *mapView;

    @property (nonatomic, retain) UITableView * fieldsTableView;
    @property (nonatomic, retain) MKMapView *mapView;
4

0 回答 0