выдвиньте контроллер представления от ios UIView - PullRequest
1 голос
/ 24 января 2012

У меня есть приложение на основе навигации. При нажатии кнопки на панели навигации на первом экране я могу нажать другой контроллер вида следующим образом:

 -(void) buttonClicked:(id)sender
{

    UIViewController*  mv = [[SecondViewController alloc] init];

    [[self navigationController] pushViewController:mv animated:YES];  

}

Теперь у меня есть UIView (отдельные файлы .h и .m) как часть первого экрана. По нажатию кнопки в UIView, я хочу нажать SecondViewController. Я пробовал следующее:

 UIViewController*  mv = [[SecondViewController alloc] init];
 UIViewController * home=[[FirstViewController alloc]init];
 [[home navigationController] pushViewController:mv animated:YES];

Это не работает !! Пожалуйста, помогите

Ответы [ 6 ]

0 голосов
/ 02 июля 2014

Вы можете использовать это. Это работает очень хорошо для меня: -

Сначала создайте объект AppDelegate в классе UIView и инициализируйте его. Затем создайте объект Navigationcontroller в Appdelegate.h: -

@property(strong,nonatomic) UINavigationController *navControl;

В вашем UIView Class реализуйте этот код, куда вы хотите нажать: -

ViewController *objview = [[ViewController alloc]init]; [appDelegate.navControl pushViewController:objview animated:YES];
0 голосов
/ 30 января 2012

Если я не ошибаюсь, ваш UIView, хотя и находится в отдельных файлах, все равно добавляется на экран из класса UIViewController.

Просто отправьте уведомление из UIView в ваш класс FirstViewController, к которому у вас есть доступ кнавигационный контроллер.Затем нажмите на контроллер SecondViewController.

0 голосов
/ 24 января 2012

Попробуйте использовать один и тот же навигационный контроллер для просмотра в режиме просмотра, он сохраняет тот же стек ViewControllers.

UIViewController*  mv = [[SecondViewController alloc] init];
[[self navigationController] pushViewController:mv animated:YES]; 

[mv release];
0 голосов
/ 24 января 2012

Теперь я вижу твою проблему!Вам нужно # импортировать ваш FirstViewController, а затем @class его.Затем сделайте свой толчок.

Итак:

//.h 
#import "FirstViewContoller.h"

@class FirstViewController;

@interface...

//.m

-(void)return {
FirstViewController *firstview = [[FirstViewController alloc]init(withnibname:)];
[firstView.navigationController pushViewController: firstView.navigationController.topViewController animated: TRUE];
}
0 голосов
/ 24 января 2012

Почему это работает? Случайное создание контроллеров представления, вид которых даже не виден, не является решением. Вы можете также сохранить ссылку на ВК в виде:

@imlementation ViewController

- (id) init
{
    // ...
    aView = [[CustomView alloc] init];
    aView.viewController = self;
    // ...
}

@end

@interface CustomView

@property (assign) ViewController *viewController;

@end

Или вы можете искать цепочку респондента во время выполнения:

UIResponder *next = [view nextResponder];
while (next)
{
    if ([next isKindOfClass:[ViewController class]])
    {
        break;
    }
    next = [next nextResponder];
}

И теперь «следующий» будет содержать контроллер представления (или ноль, если он не может быть найден).

0 голосов
/ 24 января 2012
UIViewController*  mv = [[SecondViewController alloc] init];
UIViewController * home=[[FirstViewController alloc]init];
[[home navigationController] pushViewController:mv animated:YES];

Проблема в том, что home не является частью стека навигации, поэтому [home navigationController], безусловно, ноль.Я не совсем понимаю, что вы пытаетесь сделать здесь, но просто создание контроллера представления не означает, что он на самом деле является частью графика контроллера представления.

...