gpt4 book ai didi

ios - 在 View Controller View 中渲染/显示可重用 View

转载 作者:搜寻专家 更新时间:2023-11-01 06:41:48 28 4
gpt4 key购买 nike

是否可以设计作为 UIView 子类的可重用 View ,然后将 UIView 的实例拖到 Storyboard中 View Controller 的 View 上,将其类型更改为可重用 View 的类型,然后查看它?

编辑:

这是我的基础 View :

enter image description here

这是我使用它的 View Controller View :

enter image description here

我必须在 BaseView 中执行此操作:

func customInit() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
insertSubview(view, atIndex: 0)
}

因为使用 addSubview 它出现在所有内容之上,它似乎是最后添加的。但我不知道为什么。

最佳答案

第一个概念

这是创建独立可设计 View 的一个很好的例子没有 xib 文件。

我不能对你说得太具体,因为你只问了一个随机样本,它看起来很像这样。

随机 View .swift

import UIKit;

//

@IBDesignable

@objc class RandomView: UIView {

@IBInspectable var borderRadius: CGFloat = 0
@IBInspectable var borderWidth: CGFloat = 0
@IBInspectable var borderColour: UIColor? = nil

override func didMoveToSuperview() {
super.didMoveToSuperview()

if self.superview != nil {
// build up layout
self.borderColour = UIColor.redColor()
} else {
// /dismiss it
self.borderColour = nil
}
}

override func drawRect(rect: CGRect) {
super.drawRect(rect)
// draw the layout

self.layer.borderWidth = self.borderWidth
self.layer.cornerRadius = self.borderRadius

if let color: UIColor = borderColour {
self.layer.borderColor = color.CGColor
} else {
self.layer.borderColor = nil
}
}

}

然后

您可以将一个新的 UIView 添加到您的主视图,并且对于该特定类,您可以将自定义类显式设置到 IB 中:

explicit class

IB 更新了属性面板,现在您可以更改要放入 View 中的每个实例的边框宽度/半径/颜色,这些更改会立即生效:

appearance


第二个概念

这个概念还需要创建 xib 文件,所以实际上我们将有两个文件,在 xib 中您可以像往常一样构建您的自定义界面。

随机 View .xib

这就是它的样子,将 File's Owner 设置为 RandomView 可能很重要,但其他一切都只是这里的常规业务,我只添加了自定义 View 中间的单个 UILabel

the custom view

随机 View .swift

import UIKit;

//

@IBDesignable

@objc class RandomView: UIView {

@IBInspectable var title: NSString? {
set (newValue) {
if self.customLabel != nil {
self.customLabel!.text = newValue as? String
}
}
get {
if self.customLabel != nil {
return self.customLabel!.text
} else {
return nil
}
}
}
@IBOutlet var customLabel: UILabel? = nil

var view: UIView!

override init(frame: CGRect) {
super.init(frame: frame)
customInit()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
customInit()
}

func customInit() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight] // quick soliution
addSubview(view)
}

func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "RandomView", bundle: bundle) // get xib name correctly!
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}

}

现在您可以将这个新 View 放入任何其他界面,例如:

added as subview

我的 View 看起来像这样,在 View 中间有一个 UILabel(使用 xib 中的自动布局和约束),所以实际上创建了一个 UILabel IB 中可设计 View 的 em>“预览”:

changing inspectable values


注意:显然您不需要制作可检查的属性,您可以对所有内容进行硬编码,甚至可以添加额外的 subview 或您界面实际需要的任何内容,但基本概念就是这么简单。

关于ios - 在 View Controller View 中渲染/显示可重用 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com