我从另一个提出一个视图控制器:
- (void)showModalView
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MySecViewController *mySecViewController = [storyboard instantiateViewControllerWithIdentifier:@"secController"];
mySecViewController.delegate = self;
[self presentViewController:mySecViewController animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
然后在呈现中UIViewController,该方法viewWillTransitionToSize:withTransitionCoordinator:被调用iOS 8但不在iOS 9...
谢谢
uiviewcontroller screen-orientation autorotate ios presentviewcontroller
我提出了一个UIViewController使用自定义转换和自定义UIPresentationController.视图控制器的视图不会覆盖整个屏幕,因此呈现视图控制器仍然可见.
接下来,我UIImagePickerController在此视图控制器的顶部提供一个实例.问题是,当我关闭图像选择器时,呈现视图控制器的框架覆盖整个屏幕而不是我想要它覆盖的部分.frameOfPresentedViewInContainerView在我的自定义中指定的框架UIPresentationController似乎完全被忽略.
仅当存在与所述图像拾取器modalPresentationStyle的UIModalPresentationOverCurrentContext我的帧保持不变(因为没有视图从视图层次结构在第一位置去除这是有意义的).不幸的是,这不是我想要的.我希望图像选择器全屏显示,无论出于何种原因,它似乎搞乱了我的布局.我可能做错了什么或遗忘在这里?有什么建议?
objective-c uiviewcontroller ios presentviewcontroller uipresentationcontroller
弹出警报时,键盘将被解除.我到处寻找,但没有找到保持键盘可见的解决方案.当提示警报时,文本字段似乎会自动重新响应第一响应者,因为警报是以模态方式呈现的.如何将键盘保持在此警报之后,即使没有可能的交互,文本字段仍然可以编辑?
所以我有一个根视图控制器,当用户按下它时会有一个按钮呈现另一个视图控制器.这个第二个控制器有一个关闭选项,它只返回到根视图控制器,当用户触摸它时,它会关闭当前视图控制器,因此它会返回到根视图控制器一秒钟并呈现另一个控制器.去我使用的第一个控制器:
let vc = FirstController()
self.present(vc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
当在另一个视图控制器中时,我选择只关闭的按钮我这样做.
self.dismiss(animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
因此,对于需要解雇并呈现另一个的第二个控制器,我尝试了以下内容:
self.dismiss(animated: true, completion: {
let vc = SecondController()
self.present(vc, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
Warning: Attempt to present <UINavigationController: 0xa40c790> on <IIViewDeckController: 0xa843000> whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud) 自从在iOS 8上测试我的应用程序以来,我发现一个关于视图控制器初始化和演示的工作真的很慢.
我曾经在iOS 6和7上使用类似的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
[self.window setRootViewController:_rootController];
[self.window makeKeyAndVisible];
// Conditions
if (#first launch condition#) {
// quite small controller containing Welcome showcase
WelcomeViewController *w = ....
[_rootViewController presentViewController:w animated:NO];
}
else if (#last opened item condition#) {
// pretty big container, root view controller contains
// a grid view which opens Item detail container the same way
ItemDetailController *item = ....
[_rootViewController presentViewController:item animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
在iOS 8中,这变成了一个非常缓慢的地狱.根视图控制器现在可以看到0.5-1秒,然后立即重新绘制屏幕.此外,演示文稿的缓慢开始引起Unbalanced calls to begin/end appearance …
我试图在用户点击表格视图中的表格视图单元格时将其带到新的视图控制器.更具体地说,当用户点击人员用户名时,它应该将他们带到该用户档案.用户名是表视图单元格,配置文件是新视图控制器.我认为这样做的方法是使用".presentViewController(vc,animated:true,completion:nil)"然而,当我这样做时,它说"myCell没有名为.presentViewController的成员"
如果有人能帮我解决这个问题,我将不胜感激
uitableview uiviewcontroller ios presentviewcontroller swift
在我的iOS应用程序中,用户可以从列表中选择一个图像,在该图像上显示一个包含图像的模态和删除图像的选项.如果用户选择删除图像,则返回到包含图像列表的原始viewController.我需要刷新原始ViewController以考虑已删除的图像.
当图像被删除到父视图控制器时,我尝试使用NSNotificationCenter进行广播.但是,似乎从未收到广播.
还有其他方法吗?
(我试着按照这里列出的例子,但它似乎没有工作)
以下是我的代码:
EditStepViewController(原始视图控制器):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MediaPreviewViewController *mediaPreviewVC = (MediaPreviewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MediaPreviewViewController"];
mediaPreviewVC.selectedImageURL = [NSString stringWithFormat:@"%@",gestureRecognizer.view.tag];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mediaPreviewVC];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didDismissMediaPreview)
name:@"MediaPreviewDismissed"
object:nil];
[self presentViewController:navigationController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
MediaPreviewViewController(第二个ViewController):
...
[self deleteImage];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MediaPreviewDismissed" object:nil userInfo:nil];
[self dismissViewControllerAnimated:YES completion:^(){
NSLog(@"dismissed controller");
}];
Run Code Online (Sandbox Code Playgroud)
然后,回到EditStepViewController:
-(void)didDismissMediaPreview{
NSLog(@"dismissed media preview"); // this is never logged!
[self.view setNeedsDisplay]; // refresh view to account for deleted image
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
objective-c uiviewcontroller nsnotificationcenter ios presentviewcontroller
我正试图解雇一个VC并提出一个新的VC.但我不希望旧的VC再存在.我使用下面的代码来关闭当前的VC并提供新的VC.但是这样,在解雇和现在之间有一段时间间隔.我不希望用户注意到这一点.所以,我想首先提出新的VC然后解雇前一个.有没有办法做到这一点?
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destinationController = self.storyboard?.instantiateViewController(withIdentifier: "login") as! Login
let presentingVC = self.presentingViewController
self.dismiss(animated: false, completion: { () -> Void in
presentingVC!.present(destinationController, animated: true, completion: nil)
})
Run Code Online (Sandbox Code Playgroud) 我有一个使用UIModalPresentationCustom演示风格呈现的视图控制器.我使用自定义UIViewControllerTransitioningDelegate将视图控制器显示为侧边栏(因此它从屏幕边缘滑入并且不占据整个屏幕).
然而,当我然后使用UIModalPresentationFullScreen- 然后关闭全屏视图控制器呈现另一个视图控制器时,我的基础自定义显示控制器突然调整大小以占据整个屏幕.有谁知道为什么会这样?
编辑:这本质上是我animateTransition提供侧边栏的方法 - 我已经删除了大部分代码以使其可读.基本上它从transitionContext获取容器,添加目标视图控制器的视图并将其设置为容器动画.
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIView *container = transitionContext.containerView;
UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *fromView = fromVC.view;
UIView *toView = toVC.view;
if( toVC.isBeingPresented )
{
[container addSubview:toView];
//... Animate some new frame for toView
//Call [transitionContext completeTransition:YES] on animation completion
}
else
{
//... Animate fromView out
//On completion remove fromView from superview
//Call [transitionContext completeTransition:YES] on animation completion
} …Run Code Online (Sandbox Code Playgroud) objective-c uiviewcontroller ios uimodalpresentationstyle presentviewcontroller
我有一个视图控制器,视图的背景我需要半透明,并继续显示下面的视图.我调整了nib文件中的不透明度,并尝试将视图控制器推入导航堆栈并以模态方式呈现,但加载后,前一个视图被卸载.我该怎么解决这个问题?
ios ×10
swift ×5
objective-c ×3
autorotate ×1
dismiss ×1
keyboard ×1
opacity ×1
swift3 ×1
uitableview ×1