我有一个基于导航的应用程序,它有一个详细视图(UIWebView),在UIToolbar的底部有操作按钮.我想在按下"音符"按钮时添加"音符".当webview处于纵向模式时,一切正常.我按下音符按钮,模态视图打开很好,效果很好.
当webview处于横向模式时,会出现此问题.如果我按下音符按钮,所有打开模态视图的代码都会被调用,但我得到的只是一个白色屏幕.一条评论:如果我以纵向打开模态视图然后旋转设备,它会精细旋转到横向模式.它只是无法在横向模式下正确打开.
我有另一个按钮,它会调出具有相同行为的邮件编辑器.这是我的UIWebViewController中的代码:
- (IBAction)addNotes:(id)sender
{
NotesViewController *notesViewController;
// create the view controller and set it as the root view of a new navigation
// controller
notesViewController = [[NotesViewController alloc] initWithPrimaryKey:self.record.primaryKey];
UINavigationController *newNavigationController =
[[UINavigationController alloc] initWithRootViewController:notesViewController];
// present the navigation controller modally
[self presentModalViewController:newNavigationController animated:YES];
[notesViewController release];
[self.view setNeedsDisplay]; // not sure if I need this! I was trying different things...
[self.devotionText setNeedsDisplay]; // ditto...
[newNavigationController release];
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我尝试过各种不同的东西都无济于事.我只是得到一个没有导航栏的白色屏幕(尽管顶部有一个状态栏).
我目前在模态视图和弹出窗口方面遇到了一些麻烦.这可能是同样的问题,但我不确定.
我对模态视图的问题是我无法更改动画或过渡样式.例如,我写
self.modalPresentationStyle = UIModalPresentationPageSheet;
self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:IpModal animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是模态视图仍然以其原始过渡样式显示为全屏.
此外,我与弹出窗口的问题是非常相似的.即使我使用"NO"作为参数调用dismissPopover:animated:方法,转换仍然是动画的.
提前致谢.
背景:我想解雇一个我之前提出过的模态视图,然后立即呈现viewController我刚刚用新信息解雇的视频.
问题:如果没有显示指向ViewController第一个ViewController模态的父级的显式指针,我就不会非常成功.我正在尝试编写这个有用viewController的代码,而不会弄乱前面的代码.
可能的领先优势:我一直在尝试一些事情:
1.)试图访问父母ViewController,这时我不知道如何.
2.)一旦获得父母的访问权限,我可以简单地应用以下代码:
UIViewController* toPresentViewController = [[UIViewController alloc] init];
[self dismissViewControllerAnimated:YES completion:^{
[parentViewControllerAccessor presentModalViewController:toPresentViewController animated:YES];
}];
Run Code Online (Sandbox Code Playgroud)
理论上,这应该适用于父母的访问权限viewController.我对其他方式持开放态度.
假设:您无权更改父级中的任何代码ViewController.
iphone ipad modalviewcontroller presentmodalviewcontroller ios
我想在应用程序收到的每个推送消息之后呈现一个modalviewcontroller:"应用程序:(UIApplication*)应用程序didReceiveRemoteNotification:(NSDictionary*)userInfo"
我像这样呈现viewcontroller:
ReleaseViewController *viewController = [[ReleaseViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.window.rootViewController presentModalViewController:navController animated:YES];
Run Code Online (Sandbox Code Playgroud)
所以当另一个推送消息到来并且旧的ModalViewController仍然是可见的时,我想在旧的上呈现一个新的modalviewcontroller.但它不起作用.没有发生任何事情,控制台只是说(我认为这是iOS 6 Beta的调试消息):
Warning: Attempt to present <UINavigationController: 0x1dde6c30> on <UINavigationController: 0x1dd73c00> whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
PS:我不想解雇旧的ViewController,我希望它们能够堆叠.
谢谢!
我有一个带有搜索栏和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并用谷歌搜索直到我是蓝色的并且仍然没有结果.
当用户点击UITextField时,键盘会出现.我向上滚动UITextField以便位于键盘上方.这在iPhone上工作正常:

- (void) someWhere
{
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(onKeyboardShow:)
name:UIKeyboardWillShowNotification
object:nil];
}
- (void) onKeyboardShow:(NSNotification *)notification
{
CGRect keyboardRect = [[[notification userInfo]
objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue
];
if (keyboardRect.size.height >= IPAD_KEYBOARD_PORTRAIT_HEIGHT) {
self.containerView.y = self.containerView.y - keyboardRect.size.width;
} else {
self.containerView.y = self.containerView.y - keyboardRect.size.height;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,它在iPad上被破坏了.在iPad上,模态视图控制器可以显示为仅占用屏幕一部分的工作表.您可以看到最后一个UITextField与iPad上的键盘之间存在差距.

UINavigationController* nav = [[UINavigationController alloc]
initWithRootViewController:someRootViewController];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我需要从屏幕底部检测模态视图的偏移量,并将其添加到UITextField的Y坐标.这将使UITextField与键盘顶部齐平.通过一些逆向工程,我通过遍历未记录的视图层次结构得到了模态视图的框架:
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// describe is a category function on UIView that prints out the frame
[self.viewController.view.superview.superview.superview.superview …Run Code Online (Sandbox Code Playgroud) 我试图通过减少其宽度和高度在iPad上显示modalView,但问题是它不是中心对齐的.在iOS 6中它过去工作正常,但在iOS 7中它不是中心对齐的.
以下是我的代码:
m_helpQA = [[HelpQAViewController alloc]init];
m_helpQA.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:m_helpQA animated:YES completion:NULL];
m_helpQA.view.superview.bounds = CGRectMake(0, 0, 350, 250);//Dimensions of ModalView.
Run Code Online (Sandbox Code Playgroud)
目前我正是这样做的

我使用故事板segue设置为一个模态视图Form Sheet.问题是,当我在显示此视图后旋转iPad时,视图将从视图中移除/被解除.
我不知道为什么.它似乎只在以纵向开始然后旋转到横向时发生.
如果我从横向开始然后显示视图然后旋转它保持在屏幕上罚款.
有任何想法吗?
编辑----
旋转后,全屏模态视图似乎也被忽略了!
演示代码中没有任何特殊内容,这是一个全屏模式:
EditViewController *editView = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"editViewController"];
editView.delegate = self;
editView.image = image;
editView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:editView animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这在iOS 6和iOS 7上都会发生
编辑2 ----忘了提,我是从左/主视图控制器呈现模态 UISplitViewController
我有一个UIViewControllerxib,当我尝试在它上面呈现一个故事板视图时,它会崩溃.
我用它来呈现它
UIViewController * buddiesOrFacebook = [self.storyboard instantiateViewControllerWithIdentifier:@"BuddiesFBFriends"] ;
[self presentViewController:buddiesOrFacebook animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud) dismissViewControllerAnimated:completion:状态的iOS文档:
如果你目前在连续的几个视图控制器,从而构建呈现视图控制器的堆栈,调用视图控制器这种方法下的堆栈驳回其直接子视图控制器和堆栈上的孩子最重要的视图控制器.发生这种情况时,只有最顶层的视图以动画方式被删除; 任何中间视图控制器都可以从堆栈中删除.最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同.
这意味着在使用时立即解除两个模态视图控制器
[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil];
显示的动画应该是被解雇的顶级模态视图.
在iOS 7和之前的情况确实如此,但在iOS 8中,所显示的动画并不是最顶级的视图(根据我的经验,它是第二个最顶层的视图).这种行为是iOS 8中的错误还是我做错了什么?