标签: modalviewcontroller

从UIImagePickerController呈现另一个模态视图

我想在用户拍照或选择保存的照片后添加确认视图.确认视图将仅显示所选图像,并在工具栏中显示取消和上传按钮.

我的UIImagePickerController是从我的一个视图控制器以模态方式呈现的,它由导航控制器控制,导航控制器又由标签栏控制器控制.

如何以模态方式显示我的确认视图,以便在用户选择照片时占据整个屏幕(如图像选择器视图)?理想情况下,我想要这样的东西:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    UIViewController *modal = [[UIViewController alloc] init];
    modal.view = confirmationView;
    [self presentModalViewController:modal animated:YES];
    [modal release];
}
Run Code Online (Sandbox Code Playgroud)

但是,这会导致应用崩溃.我应该从PICKER以模态方式呈现确认视图吗?如果是这样,我如何确保在取消确认视图时,也不会显示选择器?

编辑:

修复了我发布的代码中的错误.这就是当我尝试从内存而不是复制+粘贴打字时发生的事情:(无论如何,到目前为止的建议没有帮助.

如果我提出模态控制器那么解雇选择器,没有任何反应,大概是因为两个控制器随后被解雇.

如果我解除拾取器然后呈现模态控制器,我得到一个关于模态转换的例外:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <UINavigationController: 0x6b33940> to <UIViewController: 0x6b62b00> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
Run Code Online (Sandbox Code Playgroud)

iphone uiimagepickercontroller modalviewcontroller

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

保留工具/标签栏时的部分卷曲模态过渡样式

有没有办法提出一个模态视图控制器,不包括UITabBarController的标签栏?

具体来说,我想使用UIModalTransitionStylePartialCurl,但保留底部栏,一个iPhone映射应用程序.

iphone uitabbarcontroller modalviewcontroller

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

如何使用UISplitViewController作为模态视图控制器?

我试图在我的iPad应用程序中显示一个UISplitViewController,将其显示为模态视图控制器.我设法显示它,但由于某种原因,模态视图左侧有一个间隙,状态栏的大小也会在方向更改时保留.

替代文字

有人知道为什么会这样吗?或者如果这是可能的话?也许我只是在挖自己一个巨大的洞.

ipad uisplitviewcontroller modalviewcontroller ios

7
推荐指数
2
解决办法
9509
查看次数

关闭一个模态ViewController并以相同的方法打开另一个.可能?

我有一种情况,我想从另一个打开一个模态控制器.但是当用户关闭时,他们应该回到两个模态控制器的父控制器.

所以我让父控制器负责这个.当用户单击第一个模态控制器上的按钮时,父级上的方法执行类似于下面的代码.

[self.navigationController dismissModalViewController:YES];
SecondModalViewController *c = [[SecondModalViewController alloc] init];
[self.navigationController presentModalViewController:c animated:YES];
[c release];
Run Code Online (Sandbox Code Playgroud)

唯一发生的事情是第一个视图关闭,但我没有看到第二个视图打开.是否可以关闭模​​态ViewController并在同一方法中打开第二个?如果是这样,怎么样?

iphone cocoa-touch modalviewcontroller

7
推荐指数
2
解决办法
6660
查看次数

多个呈现的视图控制器和iPad上的旋转

我最近在将一些代码从iPhone应用程序移植到iPad时遇到了问题.它可能与此处描述的问题有关,但我发现该问题的解释/解决方案并不令人满意.场景是这样的:

  1. 视图控制器'A'(根视图控制器)使用"表单"模式演示样式呈现模态视图控制器(称为'B').

  2. 视图控制器B呈现具有"全屏"模态呈现样式的视图控制器"C".

  3. 当视图控制器C是最顶部呈现的视图控制器时,iPad旋转.

  4. 取消C后,B将重新显示,但方向不正确.

据我所知,链接多个呈现的视图控制器应该没有问题 - 实际上,在其他视图控制器文档中呈现视图控制器中明确支持此行为.我还在iOS 5发行说明中阅读了以下声明:

iOS 5中的旋转回调不适用于通过全屏显示的视图控制器.这意味着,如果你的代码呈现了另一个视图控制器视图控制器,然后用户随后旋转设备,以不同的取向,在解雇,底层控制器(即呈现控制器)将不会收到任何旋转回调.但请注意,呈现控制器在重新显示时将接收viewWillLayoutSubviews调用,并且可以从此方法查询interfaceOrientation属性并用于正确布局控制器.

据我所知,这不会发生 - 视图控制器B接收到对-shouldAutoRotateToInterfaceOrientation的调用,但此调用中的interfaceOrientation参数的值是视图控制器B在呈现视图控制器C时的接口方向的值,而不是值解雇后C的界面取向 由于我们在iPad上,所有这些视图控制器都在-shouldAutoRotateToInterfaceOrientation中返回YES.因此B视图的界限永远不会改变,所以-willLayoutSubviews永远不会被调用.

我已经尝试在B解除它之前将视图控制器C的方向保存在回调中,然后在下次使用该信息时调用theAouldAutoRotateToInterfaceOrientation,并且仅在C被解除时返回Y的方向.这修复了,在没有进行此检查的情况下出现的损坏的UI,但是视图控制器B没有将其界面方向更新为此值,因此后续的模态演示将从设备的错误侧进行动画制作.

有没有人能够成功获得这样的视图控制器配置?它似乎并不像一个场景那么不寻常,所以我有点惊讶它没有像我最初预期的那样工作.

提前致谢.

objective-c ipad modalviewcontroller ios

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

通过prepareForSegue传递NSString - Swift

我正在尝试使用prepareForSegue方法将字符串传递给下面看到的我的模态视图控制器.见下文:

这是我的初始视图控制器,我将在其中呈现模态视图:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {

    if segue.identifier == "newProject" {
        var newProjectVC:ModalViewController = ModalViewController()
        newProjectVC = segue.destinationViewController as ModalViewController
        newProjectVC.testString = "hello"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的模态视图控制器:

import UIKit

class ModalViewController: UIViewController {

    var testString:NSString!

    override func viewDidLoad() {
        println(self.testString)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是故事板中的样子:[在此输入图像描述] [1]

问题是它在这一行引发异常:

    newProjectVC = segue.destinationViewController as ModalViewController
Run Code Online (Sandbox Code Playgroud)

我有一种感觉它可能与导航控制器有关但不确定,有什么想法吗?

uiviewcontroller modalviewcontroller ios segue swift

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

交互式解雇模态时出现故障

我们遇到了这个问题,当实现模态视图控制器的交互式解雇(拖动模式向下应该忽略它)时UIPercentDrivenInteractiveTransition.

建立:

  1. 用至少一个按钮UIViewController嵌入的设置UINavigationControllerUINavigationBar
  2. 模态地呈现另一个UIViewController嵌入在UINavigationController中的至少一个按钮UINavigationBar
  3. UIPanGestureRecognizer在modaly上设置UINavigationController驱动器UIPercentDrivenInteractiveTransition
  4. 拖动模态向下"按住"它 UINavigationBar

问题:

  • 在慢慢向下拖动时,动画故障导致模态视图上下跳跃

  • 毛刺只出现在:

    1. 两者UINavigationBar都至少有一个按钮
    2. 你通过点"按住"模态 UINavigationBar

最小的例子可以从github repo下载.

有没有人遇到过这样的问题?有没有解决方法?我们的设置有一些缺陷吗?

更新

问题已经模拟了与iPhone 5的模拟器上面跑项目iOS 9.3,OSX 10.11.4与Xcode的编译7.3.1.

更新2

进一步调查显示,该问题可能不在动画中:由于某些原因,在给定的设置pan.translationInView(view)中返回意外值,导致动画跳转.

部分解决方法

根据弗拉基米尔的想法,我们通过重写hitTest方法部分解决了这个问题UINavigationBar:

class DraggableNavigationBar: UINavigationBar {

    override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
        guard let view = super.hitTest(point, withEvent: event) else { return …
Run Code Online (Sandbox Code Playgroud)

uinavigationcontroller modalviewcontroller ios

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

交互式关闭模态视图控制器时出现故障

我正在使用UIViewControllerAnimatedTransitioningUIPercentDrivenInteractiveTransition以交互方式关闭一个模态呈现的视图控制器.没什么太花哨的.但我注意到,当交互开始时偶尔会出现一个小问题.如果使用.curveEaseOut选项进行动画制作会变得更加明显.我正在关注的一些在线教程(https://www.thorntech.com/2016/02/ios-tutorial-close-modal-dragging/)也会发生同样的事情.当我第一次将它向下拖动时,你可以看到gif中的故障.有什么建议?

在此输入图像描述

MyDismissAnimator

class SlideInDismissAnimator: NSObject, UIViewControllerAnimatedTransitioning {

    // ...

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        guard let toVC = transitionContext.viewController(forKey: .to), 
        let presentedVC = transitionContext.viewController(forKey: .from) else {return}

        let presentedFrame = transitionContext.finalFrame(for: presentedVC)
        var dismissedFrame = presentedFrame
        dismissedFrame.origin.y = transitionContext.containerView.frame.size.height

        transitionContext.containerView.insertSubview(toVC.view, belowSubview: presentedVC.view)
        }
        let duration = transitionDuration(using: transitionContext)

        UIView.animate(withDuration: duration, delay: 0, options: .curveEaseOut, animations: {
            presentedVC.view.frame = dismissedFrame
        }) { _ in
            if transitionContext.transitionWasCancelled {
                toVC.view.removeFromSuperview()
            }
            transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

interactive modalviewcontroller ios swift

7
推荐指数
2
解决办法
1828
查看次数

使用"搜索栏"取消按钮关闭模态视图控制器

我有一个带有搜索栏和tableview的模态视图控制器,基本上是一个弹出式搜索框,使用pop-over segue呈现.在顶部有一个带取消按钮的UISearchBar.我正在尝试使用该搜索栏上的取消按钮关闭视图控制器.

我尝试了很多方法......

-(void) searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

和委托方法

[self.delegate dismissModalViewController:self]
Run Code Online (Sandbox Code Playgroud)

-(void) dismissModalViewController:(UIViewController*) viewToDismiss
{
    [viewToDismiss dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

我不知道UISearchBar是否在干扰,但这似乎是一个合理的假设.否则这是一个常见的话题,我为提出一个之前可能已经回答的问题而道歉但是我已经阅读了fm并用谷歌搜索直到我是蓝色的并且仍然没有结果.

uisearchbar modalviewcontroller ios uisearchcontroller

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

应用程序尝试在目标"当前视图控制器"上显示零模态视图控制器

我有一个UIViewControllerxib,当我尝试在它上面呈现一个故事板视图时,它会崩溃.

我用它来呈现它

 UIViewController * buddiesOrFacebook = [self.storyboard   instantiateViewControllerWithIdentifier:@"BuddiesFBFriends"] ;
 [self presentViewController:buddiesOrFacebook animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

modalviewcontroller ios

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