是否有内置的方式从a UIView到它UIViewController?我知道你可以从UIViewController它UIView通过它,[self view]但我想知道是否有反向参考?
我希望在任何其他视图之上显示甚至导航栏,这是一种看起来像这样的"弹出"视图:
UIViewController下面的其他.UIView中间的窗口有一些信息,(如果你想知道一切,日历).为此,我创建了一个包含两个UIViews(背景和窗口)的UIViewController,我正在尝试显示它.我试过一个简单的[mySuperVC addSubview:myPopUpVC.view],但我仍然有上面的导航栏.
我试图将它作为模态呈现,但是UIViewController底层消失了,我失去了透明效果.
任何想法,我相信这很简单......
谢谢!
如果UIViewController没有访问权限,我似乎无法获得最高分UINavigationController.这是我到目前为止:
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(vc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有做任何事情.在keyWindow和rootViewController似乎是非零值太多,所以可选的链接不应该是一个问题.
注意: 做这样的事情是个坏主意.它打破了MVC模式.
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
Run Code Online (Sandbox Code Playgroud)
在任何ViewController中使用上面的代码将statusBar颜色设置为White为特定的viewcontroller 在iOS8中不起作用.有什么建议?使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中所需的更改之后,颜色会发生变化.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
如何更改某些必需和特定ViewControllers的状态栏颜色?
我正在使用Xcode 8.0 beta 4.
在以前的版本中,UIViewController具有设置状态栏样式的方法
public func preferredStatusBarStyle() -> UIStatusBarStyle
Run Code Online (Sandbox Code Playgroud)
但是,我发现它在Swift 3中改为"Get ONLY varaiable".
public var preferredStatusBarStyle: UIStatusBarStyle { get }
Run Code Online (Sandbox Code Playgroud)
如何在我的UIViewController中提供使用的样式?
我一直对应分配给的任务类型有点不清楚viewDidLoad对比viewWillAppear:在一个UIViewController子类.
例如,我正在做一个应用程序,我有一个UIViewController子类命中服务器,获取数据,将其提供给视图,然后显示该视图.什么是这样做的利弊viewDidLoad对比viewWillAppear?
我决定用Swift语言继续我的剩余项目.当我在storyboard viewcontroller中添加自定义类(.swift类,哪个子类到UIViewcontroller)并加载项目时,应用程序突然崩溃并出现以下错误:
致命错误:在课堂上使用未实现的初始化程序'init(coder :)'
这是一个代码:
import UIKit
class TestViewController: UIViewController {
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// #pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation …Run Code Online (Sandbox Code Playgroud) 我有一个UIViewController视图作为另一个UIViewController视图顶部的子视图/模态,例如子视图/模态应该是透明的,并且任何添加到子视图的组件都应该是可见的.问题是我有子视图显示黑色背景而不是有clearColor.我试图制作UIView一个clearColor而不是黑色背景.有人知道它有什么问题吗?任何建议表示赞赏.
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
Run Code Online (Sandbox Code Playgroud)
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
Run Code Online (Sandbox Code Playgroud)
决议:我解决了问题.它适用于iPhone和iPad.没有黑色背景的模态视图控制器只是clearColor/transparent.我需要改变的唯一一件事是我换成UIModalPresentationFullScreen了UIModalPresentationCurrentContext.这有多简单啊!
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用以下modalPresentationStyle财产navigationController:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; …Run Code Online (Sandbox Code Playgroud) NavigationControllers具有ViewController堆栈来管理和限制动画过渡.
将视图控制器作为子视图添加到现有视图控制器需要将事件传递给子视图控制器,这很难管理,几乎没有烦恼,并且通常在实现时感觉像是一个糟糕的黑客(Apple也建议不要这样做).
呈现模式视图控制器再次将视图控制器放在另一个上面,虽然它没有上面描述的事件传递问题,但它并没有真正"交换"视图控制器,而是堆叠它.
故事板仅限于iOS 5,几乎是理想的,但不能在所有项目中使用.
有人可以在没有上述限制的情况下更改视图控制器的方式提供一个SOLID代码示例,并允许它们之间的动画过渡?
一个接近的例子,但没有动画: 如何在没有导航控制器的情况下使用多个iOS自定义视图控制器
编辑:导航控制器使用很好,但需要动画过渡样式(不仅仅是幻灯片效果),显示的视图控制器需要完全交换(不是堆叠).如果第二个视图控制器必须从堆栈中删除另一个视图控制器,那么它的封装不够.
编辑2:iOS 4应该是这个问题的基本操作系统,我应该在提到故事板时澄清(上图).
我很难找到解决这个问题的好方法.在视图控制器的-viewWillDisappear:方法中,我需要找到一种方法来确定是否因为视图控制器被推到导航控制器的堆栈上,或者是否因为视图控制器因弹出而消失.
目前我正在设置标志,isShowingChildViewController但它变得相当复杂.我认为我可以检测它的唯一方法是在-dealloc方法中.
uiviewcontroller ×10
ios ×8
swift ×4
iphone ×3
cocoa-touch ×2
objective-c ×2
ios8 ×1
ipad ×1
macos ×1
popupwindow ×1
statusbar ×1
storyboard ×1
uianimation ×1
uikit ×1
uistatusbar ×1
uiview ×1
viewdidload ×1
xcode6 ×1