我有 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;