didSelectRowAtIndexPath не переходить к destinationView программно - PullRequest
0 голосов
/ 12 сентября 2018

Я использую UITableView как дочерний вид в другом представлении, называемом ViewController, и в UITableView я хочу, чтобы в ячейке можно было нажимать и переходить к целевому представлению без использования 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 голосов
/ 12 сентября 2018

Если вы используете структуру стека, т.е. родительский контроллер встроен в 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];
0 голосов
/ 12 сентября 2018

Проверьте, не равен ли ваш navigationController ноль, и создайте экземпляр объекта контроллера представления для нажатия.

1. Проверьте навигацию (из раскадровки):

enter image description here

2. Экземпляр-контроллер вида:

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

Если в вашем проекте более 1 раскадровки, вы можете использовать,

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 из DescriptionViewController добавьте белый вид для загрузки.

UIView *whiteView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.width)];
whiteView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:whiteView];
0 голосов
/ 12 сентября 2018

Если ваш контроллер вида встроен в UINavigationController, то будет работать следующий код:

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

В противном случае вам придется представить ваш контроллер вида модально, как показано ниже:

[self presentViewController:desc animated:YES completion:nil];
0 голосов
/ 12 сентября 2018

Правильно у вас нет навигации

[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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...