我想在用户拍照或选择保存的照片后添加确认视图.确认视图将仅显示所选图像,并在工具栏中显示取消和上传按钮.
我的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) 有没有办法提出一个模态视图控制器,不包括UITabBarController的标签栏?
具体来说,我想使用UIModalTransitionStylePartialCurl,但保留底部栏,一个iPhone映射应用程序.
我试图在我的iPad应用程序中显示一个UISplitViewController,将其显示为模态视图控制器.我设法显示它,但由于某种原因,模态视图左侧有一个间隙,状态栏的大小也会在方向更改时保留.

有人知道为什么会这样吗?或者如果这是可能的话?也许我只是在挖自己一个巨大的洞.
我有一种情况,我想从另一个打开一个模态控制器.但是当用户关闭时,他们应该回到两个模态控制器的父控制器.
所以我让父控制器负责这个.当用户单击第一个模态控制器上的按钮时,父级上的方法执行类似于下面的代码.
[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应用程序移植到iPad时遇到了问题.它可能与此处描述的问题有关,但我发现该问题的解释/解决方案并不令人满意.场景是这样的:
视图控制器'A'(根视图控制器)使用"表单"模式演示样式呈现模态视图控制器(称为'B').
视图控制器B呈现具有"全屏"模态呈现样式的视图控制器"C".
当视图控制器C是最顶部呈现的视图控制器时,iPad旋转.
取消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没有将其界面方向更新为此值,因此后续的模态演示将从设备的错误侧进行动画制作.
有没有人能够成功获得这样的视图控制器配置?它似乎并不像一个场景那么不寻常,所以我有点惊讶它没有像我最初预期的那样工作.
提前致谢.
我正在尝试使用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)
我有一种感觉它可能与导航控制器有关但不确定,有什么想法吗?
我们遇到了这个问题,当实现模态视图控制器的交互式解雇(拖动模式向下应该忽略它)时UIPercentDrivenInteractiveTransition.
建立:
UIViewController嵌入的设置UINavigationControllerUINavigationBarUIViewController嵌入在UINavigationController中的至少一个按钮UINavigationBarUIPanGestureRecognizer在modaly上设置UINavigationController驱动器UIPercentDrivenInteractiveTransitionUINavigationBar问题:
在慢慢向下拖动时,动画故障导致模态视图上下跳跃
毛刺只出现在:
UINavigationBar都至少有一个按钮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) 我正在使用UIViewControllerAnimatedTransitioning并UIPercentDrivenInteractiveTransition以交互方式关闭一个模态呈现的视图控制器.没什么太花哨的.但我注意到,当交互开始时偶尔会出现一个小问题.如果使用.curveEaseOut选项进行动画制作会变得更加明显.我正在关注的一些在线教程(https://www.thorntech.com/2016/02/ios-tutorial-close-modal-dragging/)也会发生同样的事情.当我第一次将它向下拖动时,你可以看到gif中的故障.有什么建议?
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) 我有一个带有搜索栏和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并用谷歌搜索直到我是蓝色的并且仍然没有结果.
我有一个UIViewControllerxib,当我尝试在它上面呈现一个故事板视图时,它会崩溃.
我用它来呈现它
UIViewController * buddiesOrFacebook = [self.storyboard instantiateViewControllerWithIdentifier:@"BuddiesFBFriends"] ;
[self presentViewController:buddiesOrFacebook animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud) ios ×7
iphone ×3
ipad ×2
swift ×2
cocoa-touch ×1
interactive ×1
objective-c ×1
segue ×1
uisearchbar ×1