从其他视图控制器推送的视图控制器永远不会加载
View Controller Pushed from other view controller never loads
在我的基于选项卡的应用程序中,我有一个带有 UITableView
的视图控制器,它是我在情节提要中创建的。当您在 table 中的其中一张图像上滑动时,我希望当前的视图控制器 (SecondViewController
) 加载一个 xib 文件 (SpeciesViewController.xib
) 以便 "take the app" 到一个新的视图。到目前为止,didSelectRowAtIndexPath
在滑动时被调用,但 xib 文件从未被加载。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SpeciesViewController* speciesController = [[[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] autorelease];
// SpeciesViewController* speciesController = [[SpeciesViewController alloc] init];
Species *theSpecies = [fetchedResultsController objectAtIndexPath:indexPath];
speciesController.theSpecies = theSpecies;
switch (sortBySegmentedControl.selectedSegmentIndex) {
case kSortByCommonNameFirst:
speciesController.title = [theSpecies commonNameFirstLast];
break;
case kSortByCommonNameLast:
speciesController.title = [theSpecies commonNameLastFirst];
break;
case kSortByScientificName:
speciesController.title = [[NSString alloc] initWithFormat:@"%@%@",
[theSpecies.scientificName substringToIndex:1],
[[theSpecies.scientificName substringFromIndex:1] lowercaseString]];
break;
default:
break;
}
speciesController.hidesBottomBarWhenPushed = YES;
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
//// Store current index path for viewDidAppear animation. ////
self->currentSelectedIndexPath = indexPath;
[self.navigationController pushViewController:speciesController animated:YES];
}
SpeciesViewController
笔尖在属性检查器中具有 SpeciesViewController
作为其自定义 class。出于这个原因,我希望在 pushViewController:speciesController
.
时调用 ViewDidLoad 或 SpeciesViewController.m
中的任何其他方法
许多关于加载 nib 问题的帖子都与 initWithNibName
与 initWithCoder
的错误有关。但是,我相信我使用 initWithNibName
是正确的,因为我是从视图控制器这样做的。
感谢您的帮助!非常感谢!
我认为你不应该使用 autorelease,如果 nib 名称正确,这应该可以工作
SpeciesViewController* speciesController = [[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] ;
而且我认为你应该首先将你的 tableviewcontroller 嵌入到 NavigationController 中,如果你还没有这样做,那么我猜 self.navigationControlller 目前是 nil。
你可以像这样呈现视图控制器
[self presentViewController:speciesController animated:YES completion:nil];
希望对您有所帮助
在我的基于选项卡的应用程序中,我有一个带有 UITableView
的视图控制器,它是我在情节提要中创建的。当您在 table 中的其中一张图像上滑动时,我希望当前的视图控制器 (SecondViewController
) 加载一个 xib 文件 (SpeciesViewController.xib
) 以便 "take the app" 到一个新的视图。到目前为止,didSelectRowAtIndexPath
在滑动时被调用,但 xib 文件从未被加载。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SpeciesViewController* speciesController = [[[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] autorelease];
// SpeciesViewController* speciesController = [[SpeciesViewController alloc] init];
Species *theSpecies = [fetchedResultsController objectAtIndexPath:indexPath];
speciesController.theSpecies = theSpecies;
switch (sortBySegmentedControl.selectedSegmentIndex) {
case kSortByCommonNameFirst:
speciesController.title = [theSpecies commonNameFirstLast];
break;
case kSortByCommonNameLast:
speciesController.title = [theSpecies commonNameLastFirst];
break;
case kSortByScientificName:
speciesController.title = [[NSString alloc] initWithFormat:@"%@%@",
[theSpecies.scientificName substringToIndex:1],
[[theSpecies.scientificName substringFromIndex:1] lowercaseString]];
break;
default:
break;
}
speciesController.hidesBottomBarWhenPushed = YES;
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
//// Store current index path for viewDidAppear animation. ////
self->currentSelectedIndexPath = indexPath;
[self.navigationController pushViewController:speciesController animated:YES];
}
SpeciesViewController
笔尖在属性检查器中具有 SpeciesViewController
作为其自定义 class。出于这个原因,我希望在 pushViewController:speciesController
.
SpeciesViewController.m
中的任何其他方法
许多关于加载 nib 问题的帖子都与 initWithNibName
与 initWithCoder
的错误有关。但是,我相信我使用 initWithNibName
是正确的,因为我是从视图控制器这样做的。
感谢您的帮助!非常感谢!
我认为你不应该使用 autorelease,如果 nib 名称正确,这应该可以工作
SpeciesViewController* speciesController = [[SpeciesViewController alloc]initWithNibName:@"SpeciesViewController" bundle:nil] ;
而且我认为你应该首先将你的 tableviewcontroller 嵌入到 NavigationController 中,如果你还没有这样做,那么我猜 self.navigationControlller 目前是 nil。
你可以像这样呈现视图控制器
[self presentViewController:speciesController animated:YES completion:nil];
希望对您有所帮助