我在iOS中有一个菜单,我在popover中显示.我可以分别使用UIPopoverController和UIPopoverPresentation控制器在iOS7和iOs8中呈现一个popover.我遇到了一个问题,虽然当弹出窗口可见并且设备旋转时,弹出窗口在动画期间瞬间消失,然后在动画后重新出现.问题是,当弹出窗口重新出现时,其背景颜色被绘制为默认背景颜色.
我正在使用backgroundColor属性设置颜色.
self.popoverPresentationController.backgroundColor = [UIColor grayColor]; // iOS 8 style
Run Code Online (Sandbox Code Playgroud)
我90%肯定这实际上是Apple实施中的一个错误.我在backgroundColorafter rotation属性中看到的值是正确的,但绘制的像素不是.我想知道是否有其他人遇到过这个问题并找到了解决方法.如果雷达打开我会跟着它,如果不是,我会自己提交一个.
我将添加我如何呈现popover.在这两个版本中,我使用barButtonItem作为我的锚点.
[self.menuPopoverController presentPopoverFromBarButtonItem:item permittedArrowDirections:UIPopoverArrowDirectionAny animated:animated];
Run Code Online (Sandbox Code Playgroud)
这里是使用新的iOS8 UIPresentationPopoverController:
UIPopoverPresentationController *popover = self.popoverPresentationController;
popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
popover.barButtonItem = item;
[viewController presentViewController:self animated:YES completion:nil]; // I'm presenting a view controller from within itself.
Run Code Online (Sandbox Code Playgroud) cocoa-touch popover uipopovercontroller ios presentviewcontroller
我的目标是提出一种视图控制器,而不直接将其丢弃presentingViewController。
为了更加清楚,请考虑以下示例:
参考此故事板:
假设第一个黑色视图控制器是第一个(初始)控制器,则它应该显示第三个白色视图控制器;问题是白色视图控制器应撤消到第二个橙色视图控制器,而不是黑色视图控制器,因此其行为应类似于:
如何应用这种行为?
备注:没有导航控制器,应该存在/关闭,而不是推/弹出。
我正在实现自己的"后退"按钮.其中onClick,以下代码在ViewController被解雇的(VC)中执行:
navigationStack navigationStack,然后使用它presentViewController
后面的工作是视觉上有效的 - 即当前VC消失,之前VC出现.但是,viewDidLoad不调用该方法.因此,屏幕不会更新数据更新viewDidLoad.
[self dismissCurrentViewController:self completion:^{
[TWStatus dismiss];
FHBaseViewController *vcToDisplay = [[FHDataManager sharedInstance] popNavigationStack];
[vcToDisplay.homeVC presentViewController:vcToDisplay animated:NO completion: ^{ }];
}];
Run Code Online (Sandbox Code Playgroud)
问题:
viewDidLoad在presentViuewController使用时总会被调用?viewDidLoadVC#2中的一个名为ONLY的方法"构建"屏幕.iOS如何在不显示屏幕的情况下显示viewDidLoad?顺便说一下,我没有使用故事板.任何帮助表示赞赏!
我正在使用Objective C处理iPhone应用程序.因为我需要同时关闭两个UIViewControllers,所以我使用下面的代码:
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
此代码在iOS6和iOS7中运行良好,但在iOS8中无效.我已经使用断点检查,我的ViewController viewDidLoad和viewWillAppear方法正在调用,但我的视图根本没有加载,所以作为输出,我得到空白的白色屏幕.任何人都可以帮助我,对于iOS8,我该如何解决这个问题,我是否需要使用presentViewController而不是presentViewController?
iphone presentmodalviewcontroller presentviewcontroller ios8
我在iOS应用程序中以模态方式呈现视图控制器.问题是没有崩溃,应用程序会在调用presentViewController:animated时冻结.统计信息显示CPU使用率为100%,即使在手动关闭应用程序后,使用率也不会下降.
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
CustomModalViewController *vvc = [sb instantiateViewControllerWithIdentifier:@"CustomModalViewController"];
if(!vvc){
NSLog(@"ERROR!!! vvc is null");
}
NSLog(@"instantiate modal view controller");
vvc.providesPresentationContextTransitionStyle = YES;
vvc.definesPresentationContext = YES;
vvc.data = data;
NSLog(@"before presenting modal view controller");
[vvc setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self presentViewController:vvc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我尝试在我的自定义类的viewDidLoad中打印一些调试语句,但这些也没有被调用.
我不明白为什么没有显示视图控制器.任何帮助将不胜感激.我想知道在什么情况下你的应用程序在推送视图控制器时进入无限循环,还是因为其他原因?
更新:
我更新到XCode 7后发生此错误.不确定,但我想这可能是新SDK-UIKit或LLVM编译器的问题.我用Xcode 6.4将我的项目复制到另一个mac,错误消失了!我没有更改任何会导致问题的构建设置.
有关如何进行的任何指示?
当前视图控制器不使用ios 9,当我按下按钮时它没有重定向到当前视图控制器.
为什么会这样?
我试过下面的代码
RegistrationViewController * viewController =[[UIStoryboard storyboardWithName:@"Registration" bundle:nil] instantiateViewControllerWithIdentifier:@"RegistrationViewController"];
[self presentViewController:viewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
我也试过下面的代码
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Registration"
bundle:nil];
RegistrationViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"RegistrationViewController"];
[self presentViewController:add animated:YES completion:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:add
animated:YES
completion:nil];
});
}];
Run Code Online (Sandbox Code Playgroud)
编辑
我的完整代码在这里.我正在使用Xcode 7并使用ios 9运行它
#import "LoginViewController.h"
#import "RegistrationViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can …Run Code Online (Sandbox Code Playgroud) 我想要呈现比屏幕小的尺寸的视图控制器vc2,如何在Swift 3中做到这一点?感谢帮助。这是我的代码:
@IBAction func leftButtonPressed(_ sender: UIButton) {
let vc2 = self.storyboard?.instantiateViewController(withIdentifier: "Controller2") as! ViewController2
vc2.modalPresentationStyle = .currentContext
present(vc2, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) 我是斯威夫特的菜鸟。我在导航控制器中有一个初始视图控制器。里面是一个tableView。当我单击 NavigationBar 中的添加按钮项时,会以模态方式出现一个新的 viewController。现在我单击呈现的 Vc 中的另一个按钮,呈现的 Vc 被关闭。现在存在根 Vc。但我会展示一个新的根 vc。当关闭第二个 Vc 时,我将设置一个新的根 Vc。
当我关闭第二个 vc 时,我可以以编程方式设置一个新的根 Vc 吗?
我的项目中有一个自定义选项卡,位于应用程序的每个屏幕上,因此我创建了自定义UIView类和xib文件,并在其中添加了按钮.现在我希望我的按钮在不同的屏幕上具有不同的story boardID.但我无法presentViewController从UIView课堂上打电话.以前我在extension课堂上自定义功能,以在屏幕之间导航,但UIView类也无法调用该功能.
import UIKit
@IBDesignable class tab: UIView {
var view: UIView!
@IBAction func btn1(sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("6")
self.presentViewController(vc, animated: true, completion: nil)
}
override init(frame: CGRect) {
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
} …Run Code Online (Sandbox Code Playgroud) 我的申请面临着奇怪的问题.实际上,当我呈现视频控制器播放视频时.在视频加载时,用户按下菜单按钮,应用程序转到后台.虽然我已经覆盖菜单按钮操作.
这是我的代码.
override func viewWillAppear(animated: Bool) {
let menuPressRecognizer = UITapGestureRecognizer()
menuPressRecognizer.addTarget(self, action: #selector(VideoPlayerViewController.menuButtonAction(_:)))
menuPressRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.hashValue)]
self.playerController.view.addGestureRecognizer(menuPressRecognizer)
}
func menuButtonAction(ges:UITapGestureRecognizer) {
self.dismissView()
}
Run Code Online (Sandbox Code Playgroud) focus presentviewcontroller swift avplayerviewcontroller tvos