didSelectRowAtIndexPath不能以编程方式导航到destinationView

时间:2018-09-12 08:58:37

标签: ios objective-c uitableview

我在另一个名为ViewController的视图中使用UITableView作为childView,并且在UITableView中,我希望该单元格可以单击并导航到destinationView而不使用storyBoard,所以我在didSelectRowAtIndexPath上实现了此代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
  NSLog(@"helloWorld!");
  DescriptionViewController *desc = [[DescriptionViewController alloc]
  initWithNibName:@"DescriptionViewController" bundle:nil];
  [self.navigationController pushViewController:desc animated:YES];

}

4 个答案:

答案 0 :(得分:0)

正确地您没有导航

[self.navigationController pushViewController:desc animated:YES];

因此请确保当前VC嵌入在导航控制器中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    MainViewController *main = [[MainViewController alloc ] initWithNibName:@"MainViewController" bundle:nil];

    UINavigationController*nav = [[UINavigationController alloc] initWithRootViewController:main];

    self.window.rootViewController = nav;

    return YES;
}

enter image description here

如果您甚至不使用xibs,请像这样加载vc

DescriptionViewController*desc = [[DescriptionViewController alloc] init];

要替换:

[UIApplication sharedApplication].keyWindow.rootViewController = desc;

答案 1 :(得分:0)

检查您的navigationController是否不为零,并实例化要推送的视图控制器对象。

1。检查导航(从情节提要中):

enter image description here

2。实例化视图控制器:

DescriptionViewController *desc = [self.storyboard instantiateViewControllerWithIdentifier:@"DescriptionViewController"];
[self.navigationController pushViewController:desc animated:YES];

如果您的项目中有多个故事板,则可以使用

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
DescriptionViewController *desc = [sb instantiateViewControllerWithIdentifier:@"DescriptionViewController"];
[self.navigationController pushViewController:desc animated:YES];

enter image description here

3。如果您的视图不在情节提要上

只需初始化并推送到DescriptionViewController,

DescriptionViewController *desc = [[DescriptionViewController alloc] init];
[self.navigationController pushViewController:desc animated:YES];

并在viewDidLoad的{​​{1}}中添加要加载的白色视图。

DescriptionViewController

答案 2 :(得分:0)

  

如果您的视图控制器嵌入在[self.navigationController pushViewController:desc animated:YES]; 中,则下面的代码将起作用:

[self presentViewController:desc animated:YES completion:nil];
     

否则,您将必须像下面这样模态显示视图控制器:

[2018-09-10 11:40:50] production.ERROR: Detected invalid UTF-8 for fieldname "shipping_city": München  
[2018-09-10 11:41:03] production.ERROR: Detected invalid UTF-8 for fieldname "_id": Ã$zjmêá¹ëmy×
[2018-09-10 11:48:16] production.ERROR: Method [error] does not exist on [App\Http\Controllers\PaymentController]. {"userId":"5b0d2b6f12236ca36a2282ed","exception":"[object] (BadMethodCallException(code: 0): Method [error] does not exist on [App\\Http\\Controllers\\PaymentController]. at /var/www/vhosts/cabin-holiday.frontend/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:68)

答案 3 :(得分:0)

如果您使用的是堆栈结构,即父控制器已嵌入UINavigationController内,请尝试以下代码片段:

DescriptionViewController *desc = [[DescriptionViewController alloc]
                              initWithNibName:NSStringFromClass([DescriptionViewController class]) bundle:nil];
[self.navigationController pushViewController:desc animated:YES];

如果要模态显示DescriptionViewController并向其中添加导航控制器,则以下代码段将很有用

DescriptionViewController *desc = [[DescriptionViewController alloc]
                                       initWithNibName:NSStringFromClass([DescriptionViewController class]) bundle:nil];
UINavigationController *navCtr = [[UINavigationController alloc] initWithRootViewController: desc];
[self presentViewController:navCtr animated:YES completion:nil];