- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我写了一个只有一个场景和 ViewController
的应用程序。我必须为 View
设置自定义背景图片,由 ViewController
管理(即我的顶 View 包含 UIImageView
)。后来我不得不在 ViewController
中实现一些逻辑,以便它在屏幕旋转时正确地旋转/更改图片。此外,我还必须为 ViewController
覆盖一些属性,例如 preferredStatusBarStyle
。
现在我必须在我的应用程序中实现更多场景/屏幕,事实证明它们都必须与当前显示的屏幕具有相同的设计,所以我认为创建一个 CommonViewController< 是有意义的
包含背景图片的这个通用旋转相关逻辑,因此我可以从这个 CommonViewController
继承所有其他 ViewController
。我遇到的唯一问题是 CommonViewController
“要求”它管理的 View 具有 backgroundPicture: UIView
属性,我不知道如何确保这一点。
如果我创建一个新文件 CommonViewController
和 XIB 文件,我可以在 XIB 中添加 backgroundPicture
ImageView 并将其与代码连接(通过常规的“control- drag"方法),但显然这是行不通的,因为不能保证继承 CommonViewController
的 View 将具有此属性。在 Swift 的 iOS 上没有 hack 的情况下解决这个问题的正确方法是什么?
不幸的是我找不到解决方案,也许我一直在寻找错误的东西。似乎我需要以某种方式为每个场景(对于每个 CustomViewController
)继承一个 CommonViewController
,而且我还必须以某种方式将每个 Controller 的顶 View 设置为等于某些 CommonView
,这样当我尝试访问 @IBOutlet weak var backgroundPicutre: UIImageView!
时,CommonViewController
不会崩溃。
显而易见的方法是在 CommonViewController
中定义一些方法或属性,以便继承它的 Controller 可以实现/覆盖它,但它似乎有点 hacky,因为它仍然需要复制- 粘贴到每个继承 CommonViewController
的 ViewController
。
我是如何想象解决方案的:我创建了 CustomViewController: CommonViewController
,然后在我的 Storyboard 中创建了一个 View Controller 并将“Class”属性更改为“CustomViewController”(在属性编辑器中),然后我选择与这个新添加的 Controller 对应的 View 并将“Class”属性更改为“BackgroundImageView。但我不确定这是否是正确的方法(我也怀疑
CustomViewController将正确地“连接”它的
IBOutlet字段
bakcgroundImageView与相应的
UIViewfrom
BackgroundImageView`,这就是为什么我想问专家什么他们会考虑。
最佳答案
我认为您应该完全在代码中定义您的基本 Controller (CommonViewController
),即不要对基本 Controller 使用任何 xibs/ Storyboard。这并不意味着您应该完全摆脱 Storyboard/xib。除 CommonViewController
之外的所有其他 View Controller 的接口(interface)仍可使用 xibs/storyboards 实现。
在这种情况下,CommonViewController
实现可能如下所示:
import UIKit
class CommonViewController: UIViewController {
// use this property every time you need to
// manipulate backgroundPicture
var backgroundPicture: UIImageView = {
// Replace with your image name
let image = UIImage(named: "BackgroundPicture")!
let imageView = UIImageView()
imageView.image = image
return imageView
}()
override func viewDidLoad() {
// If subclass overrides viewDidLoad()
// it should contain super.viewDidLoad()
super.viewDidLoad()
view.addSubview(backgroundPicture)
// Align backgroundPicture to bounds of superview
// You can remove this code and implement
// your own alignment with frames or Autolayout
backgroundPicture.frame = view.bounds
// Send backgroundPicture to back of the view
// Otherwise backgroundPicture may overlap views added in subclasses
view.sendSubviewToBack(backgroundPicture)
}
override func viewDidLayoutSubviews() {
// If subclass overrides viewDidLayoutSubviews()
// It should contain super.viewDidLayoutSubviews()
super.viewDidLayoutSubvews()
// Align backgroundPicture to bounds of superview
// You can remove this code and implement
// your own alignment with frames or Autolayout
backgroundPicture.frame = view.bounds
}
}
关于ios - 使用 "dependencies"继承自定义 ViewController 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55904238/
我现在在另一个 ViewController 之上展示了一个几乎透明的 ViewController,但它禁用了与下面的 ViewController 的交互。这是我目前使用的代码: topContr
我有一个 View Controller ,其工具栏上有 3 个 UIButtons,可以打开一个新的 View Controller 作为弹出窗口。我在 Storyboard 中创建了 Segues
这个问题在这里已经有了答案: Delegates in swift? (15 个答案) 关闭 3 年前。 在我的场景中,我试图在关闭 View Controller 期间将值从 ViewContro
假设我有两个 viewController,AViewController 和 BViewController。 AViewController 嵌入在 NavigationController 中(
我有 3 个 View Controller A、B 和 C。 我在 vcA 上,我使用 推送 vcB [self.navigationController pushViewController:vc
我想知道如何在 VC3 和 VC1 之间传递数据。 我拥有的是 Root View (VC1)。然后你输入一个tableView,如果你选择一个项目,你将进入tableView2(VC3) - 类别
我在使用 Unwind Segue 时遇到问题。我有 3 个 ViewController,它们都在名为 ViewController.swift 的类下。我试图获取最后一个 ViewControll
我有一个应用程序,其左上角有一个汉堡菜单。按下时,菜单会以 90% 的不透明度淡入当前 ViewController,显示应用程序的主要导航选项。 我使用下面的代码从页面呈现 viewControll
我的问题是,当我呈现一个 UIViewController 时,呈现的 View 变黑了。 我有一个名为 mainViewController 的 UIViewController,它是我窗口的 Ro
例如,当我呈现UIActivityViewController或UIAlertController时,我仍然可以看到背景viewController,我不想在viewContollerA中嵌入view
我从second viewController进入了third viewController,但是我不想回到第二个viewController,我需要直接回到我的第一个viewController,我
我的应用程序是标签栏(+ 导航)应用程序。在 FirstViewController 中,我调用 onModalView。 -(void) onFilter { FilterViewControl
Photo Sharing 部分是我写的一个ViewController,当我按下正确的项目时,PhotoSharingViewController 会动画出现。 这是我的代码: PhotoShari
我正在尝试在另一个 View Controller 中使用 subview Controller 的应用程序。我有一个 VC,我正在实例化另一个 VC,并在外部 VC 内使用它自己的 xib。 我使用
我正在寻找有关包含 ViewController 的滚动的想法。我需要知道包含 View Controller 的位置。我已经尝试过 UIPageViewController 但我无法让滚动委托(de
我有一个带有嵌入式 NavigationController 的基本 ViewController 来提供工具栏。 ToolBar 有三个按钮,用于通过 segue 调用 ViewController
我的应用程序中的伙计们,我在应用程序委托(delegate)方法中有一些代码 application:didFinishLaunchingWithOptions:确定初始 View Controlle
我遇到了一个问题,我将对此进行描述,并且发现了一些类似的问题,但我认为与我的问题无关。 我有一个 UITabBarController,其中有 2 个用于 VC1 和 VC2 的选项卡。 VC1 转到
我的应用程序中有一个计时器。如果计时器达到 0,则用户将被带到失败页面。当这种情况发生时,之前的 ViewController 没有被关闭,导致更多的内存被占用。 如果出现失败页面,我希望关闭之前的
在问这个问题之前,我当然做了一些调查。我在 google 和 stackoverflow 上找到的链接或主题之一是: How do I load another view controller fro
我是一名优秀的程序员,十分优秀!