标签: popviewcontroller

我可以弹出特定ViewController吗?

我正在使用导航应用程序.我将First ViewController推送到Second ViewController,从Second ViewController推送到Third ViewController.现在我想从Third ViewController弹出到First ViewController.我正在使用下面的代码执行此任务,但我的应用程序崩溃了.

请任何机构给我一些适当的指导.我不能使用pop到rootViewController,因为它是不同的viewController.提前致谢...

在第三个ViewControler中我写了这个:

FirstViewCtr *x=[[FirstViewCtr alloc] initWithNibName:@"FirstViewCtr" bundle:nil];
[self.navigationController popToViewController:x animated:NO];
Run Code Online (Sandbox Code Playgroud)

iphone uinavigationcontroller popviewcontroller

48
推荐指数
7
解决办法
4万
查看次数

在同一操作中弹出和推送视图控制器

可以从导航堆栈中弹出一个视图,然后再将其直接推到它上面吗?

我正在尝试为这一部分实现一个平面层次结构,并希望有一个分段控制器,但我不能让分段控制器看起来像我想要的任何东西,因此我为什么要尝试使用导航控制器.

单击按钮时,我执行了以下代码:

[[self navigationController] popViewControllerAnimated:YES];
        MapsViewController *aViewController = [[MapsViewController alloc]
                                               initWithNibName:@"MapsViewController" bundle:nil];
[self.navigationController pushViewController:aViewController animated:NO];
[aViewController release];
Run Code Online (Sandbox Code Playgroud)

它突然出现,但没有任何推动的迹象!任何帮助,将不胜感激.

uinavigationcontroller popviewcontroller pushviewcontroller ios

37
推荐指数
5
解决办法
4万
查看次数

iOS:如何识别我们从Parent UIViewController中的子UIViewController回来了?

假设我在UINavigationController中的堆栈上有2个UIViewControllers.在"父"中我们称之为"[self.navigationController pushViewController:childViewController animated:YES];" 在一些用户操作和"子"中我们调用"[self.navigationController popViewControllerAnimated:YES];" 一些用户行动.

我们怎样才能在父母中认出我们刚回来的?

是否有一些"事件"驱动的方法可以识别这个popViewControllerAnimated动作是从孩子调用的?

iphone uiviewcontroller uinavigationcontroller popviewcontroller ios

15
推荐指数
2
解决办法
9276
查看次数

在查看弹出窗口之前存储UITextField内容

我确信这是在Apple文档中,或者必须在这个论坛的某个地方得到解答,因为它看起来很基本,但我自己也找不到它,也不是一个特别优雅的解决方案.

我所拥有的是一个UIViewController,它在其导航堆栈上推送编辑视图.编辑视图中包含一堆UITextField.如果其中一人正在编辑时返回按钮被触摸时,原始视图的viewWillAppear中方法任一的UITextField委托方法之前调用textFieldShouldEndEditingtextFieldDidEndEditing,或IB链接动作textFieldEditingEnded方法被调用.

以下是一些代码,我希望这些代码能够更加清晰:

在UIViewController中:

- (void) viewWillAppear: (BOOL) animated {
    [super viewWillAppear: animated];
    NSLog( @"Entering view will appear for master view" );
    nameLabelField.text = objectToEdit.name;
}
- (IBAction) editMyObject: (id) sender {
    NSLog( @"Editing the object" );
    EditViewController *evc = [[EditViewController alloc] initWithNibName: @"EditTableView" bundle: nil];
    evc.editedObject = objectToEdit;
    [self.navigationController pushViewController: evc animated: YES];
    [evc release];
}
Run Code Online (Sandbox Code Playgroud)

在EditViewController <UITextFieldDelegate>中:

- (void) viewWillAppear: (BOOL) animated {
    [super viewWillAppear: animated];
    nameField.text = editedObject.name;
}
- (void) …
Run Code Online (Sandbox Code Playgroud)

iphone uitextfield popviewcontroller

13
推荐指数
1
解决办法
2926
查看次数

横向模式下的UINavigationController导航堆栈问题

我有一个iPhone应用程序,我目前正在转换为通用二进制文件,以便与iPad配合使用.我已经成功实现了我在布局方面所需的一切,以便我的应用程序现在支持完整的横向功能(之前我主要使用纵向模式来显示内容).

但是,我有一个奇怪的问题,它只出现在横向模式下:当我将视图控制器推到堆栈上时,在后退按钮上需要两次点击才能返回到前一个视图控制器!第一次点击显示空白视图,但在左侧后退导航按钮上使用相同的名称,第二次点击将控制器恢复到之前的视图.

我没有iPad测试,所以我依靠模拟器.问题不会显示在iPhone上,如果您旋转回纵向模式则不会显示.

我的应用程序包含一个tabbarcontroller,其导航控制器为其vc加载:

//application delegate
- (void)applicationDidFinishLaunching:(UIApplication *)application
//....
WebHelpViewController *vc8 = [[WebHelpViewController alloc] init];
UINavigationController *nv8 = [[UINavigationController alloc] initWithRootViewController:vc8];

[self.tabBarController setViewControllers:[NSArray arrayWithObjects:nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nil]];
Run Code Online (Sandbox Code Playgroud)

要实现格局功能,将覆盖UITabBarController以在需要时自动旋转:

//CustomTabBarController.m
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return [[(UINavigationController *)self.selectedViewController topViewController] shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
Run Code Online (Sandbox Code Playgroud)

... 工作良好.我使用此方法导航到新视图

SomeViewController *vc = [[SomeViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
[vc release];
Run Code Online (Sandbox Code Playgroud)

这只是模拟错误吗?我该如何解决这个问题?

iphone uitabbarcontroller uinavigationcontroller popviewcontroller ipad

11
推荐指数
1
解决办法
3811
查看次数

iOS:isMovingToParentViewController未按预期工作

我的设置很简单,我的问题不是来自非常不同的这一个.但是为了更好地解释它我在这里发布:

NavController -> VC1 -> VC2
Run Code Online (Sandbox Code Playgroud)

VC1是NavController的根视图控制器.VC2可通过VC1的Push segue访问.

我想在VC1中检测是否:

它直接作为根视图控制器出现(通过Push)它是由于VC2被弹出而出现的

我阅读的文档说下面应该告诉我以后是否属实.

isMovingToParentViewController == NO 
Run Code Online (Sandbox Code Playgroud)

然而事实并非如此,并且上述情况总是证明是正确的.这意味着,(self.isMovingToParentViewController == NO)总是在发生.

这是我的代码:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = YES;

    //pushed to stack
    if (self.isMovingToParentViewController == YES)
    {
        //First time
      }
    else
    //popped off
    {
        //via Pop from VC2
    }    
}
Run Code Online (Sandbox Code Playgroud)

viewDidAppear的情况也是如此.

事实上检查,我在开始时放置断点,并在两种情况下检查以下所有都是FALSE:

([self isMovingFromParentViewController])
([self isMovingToParentViewController])
([self isBeingPresented])
([self isBeingDismissed])
Run Code Online (Sandbox Code Playgroud)

怎么了?我的故事板里有什么东西可以搞定吗?请帮忙...

uinavigationcontroller popviewcontroller pushviewcontroller ios

9
推荐指数
2
解决办法
5999
查看次数

iOS WatchKit - 如何检测Watch上何时按下后退按钮?

当Apple Watch上按下后退按钮(箭头)时,我需要在第二个视图控制器上进行一些清理.当按下后退按钮/弹出视图时,是否有任何检测/处理方法?

注意 - 我不能使用'willDeactivate()'函数,因为它让我陷入循环中我想要做的事情.

back-button uinavigationcontroller popviewcontroller ios watchkit

7
推荐指数
1
解决办法
1782
查看次数

popViewController不会自动返回到允许的方向

我有两个UIViewControllers,"A"和"B",其中"A"覆盖了shouldAutorotateToInterfaceOrientation,为UIInterfaceOrientationPortrait返回YES,"B"为所有方向返回YES.在我的例子中,"A"是根导航视图控制器,然后我使用pushViewController作为"B".之后我将设备旋转到横向,成功自动旋转"B",然后我弹出"B"(后退按钮或通过popViewController)返回"A".

在定位iPhone OS 3.1.3时,"A"按预期返回纵向.在针对iPhone OS 3.2时,我有两个副作用:

  1. "A"以横向显示.
  2. 即使现在显示"A",导航栏也不会更新.导航栏仍显示"B"的项目.只有在尝试返回/弹出一次之后,导航栏才会生成动画以显示"A"的项目.如果我试图再次按"B"并返回,我必须在导航栏动画之前弹出两次以显示"A"的项目.在这些"中间弹出"期间,"A"的视图仍然显示.

在研究这个问题时,我看到其他答案建议手动执行旋转([UIDevice setOrientation]或通过转换),但这无助于理解问题是什么,特别是为什么它在两个操作系统之间的行为不同.

所以我的问题是:UINavigationController堆栈上的所有UIViewControllers都必须支持完全相同的方向吗?如果没有,那么我需要做些什么才能让它像OS 3.1.3一样运行?

iphone rotation uinavigationcontroller popviewcontroller ipad

6
推荐指数
1
解决办法
3077
查看次数

由于Orientation/Shake,UINavigationController加载视图不正确

背景:App有一个回家的功能.主视图仅支持纵向.如果你比平时更加​​晃动,你所看到的视图开始旋转(这很好),但随后它会检测到一个震动,并将popViewControlller发送到主视图.当它这样做时它加载导航控制器就好了,但是(主页内容)下的视图被加载到栏后面并被拉伸(它基本上是在导航栏下方加载,因此它被拉伸)

后退按钮处理这个从风景到肖像很好(因为它不是中间过渡)

我应该如何处理这个方向更改(从摇动),以便我可以弹回到根视图控制器,而无需在导航栏下加载视图?

编辑:发生的事情是内容认为它有整个视图加载,所以它自己伸展整个屏幕,没有意识到它上面的导航栏.我可以看出,因为图像加载已拉长

增加了50美元的赏金.

编辑这里我是如何检测摇晃和弹出的

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{

    if ( event.subtype == UIEventSubtypeMotionShake )
    {

            UINavigationController *navController = self.navigationController;

            [[self retain] autorelease];
            HomeViewController *home = [[HomeViewController alloc]init];
            [navController popViewControllerAnimated:YES];

            home.title =@"Home View Controller";
            [home release];     
        }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)

这是我的App代表:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    navController = [[UINavigationController alloc]init];
    [self.window addSubview:navController.view];

    HomeViewController *home = [[HomeViewController alloc]init];
    [[self home] setFrame:[[UIScreen mainScreen] applicationFrame]];
Run Code Online (Sandbox Code Playgroud)

我会在这里加一个模型.

普通视图:

普通视图

摇晃/流行后的拉伸视图:

Streched

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

}
- …
Run Code Online (Sandbox Code Playgroud)

iphone xcode uinavigationbar popviewcontroller ios

6
推荐指数
1
解决办法
1326
查看次数

将数据传递到之前的视图控制器 VIPER

我在 iOS swift 中使用 VIPER 架构。我有 2 个视图控制器,比如说AB。首先,我将从A到,执行一些任务,然后从到B返回。使用 MVC 或 MVVM,我们可以创建协议并从到传输数据。但对于VIPER,我很困惑。这是我的 VIPER 代码 B,点击“后退”按钮时:BABA

看法:

@IBAction func backButtonTapped(_ sender: UIButton) {
    presenter?.goBack()
}
Run Code Online (Sandbox Code Playgroud)

主持人:

func goBack() {
    router.back()
}
Run Code Online (Sandbox Code Playgroud)

路由器:

func back() {
    viewController?.navigationController?.popViewController(animated: true)
    //here I want to send data back to previous viewcontroller
}
Run Code Online (Sandbox Code Playgroud)

我尝试在前一个控制器路由器中创建一种方法并通过该方法发送数据,但它不起作用,因为路由器没有任何演示者实例或除视图之外的任何其他实例。

popviewcontroller ios swift viper-architecture

6
推荐指数
1
解决办法
2605
查看次数