我已经用Swift创建了一个小的样例项目。我已经创建了一个"MyCustomView"作为xib,它包含标签,按钮和imageView,如下面的代码所示:
import UIKit
@IBDesignable class MyCustomView: UIView {
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var btnClick: UIButton!
@IBOutlet weak var myImageView: UIImageView!
var view:UIView!
@IBInspectable
var mytitleLabelText: String? {
get {
return lblName.text
}
set(mytitleLabelText) {
lblName.text = mytitleLabelText
}
}
@IBInspectable
var myCustomImage:UIImage? {
get {
return myImageView.image
}
set(myCustomImage) {
myImageView.image = myCustomImage
}
}
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 = self.bounds
// not sure about this ?
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
随附xib的图像以供参考。
在StoryBoard-〉ViewController中添加了UIViewCollection,如下图所示。在这个视图集合中,我需要橙色单元格来包含我的自定义xib,以便在运行时加载。
我如何实现这一目标?
Sandeep建议的新修改代码
//1导入UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.register(UINib(nibName: "MyCustomView", bundle: nil), forCellWithReuseIdentifier: "myCell")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 7
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell : MyCustomView = collectionView.dequeueReusableCellWithReuseIdentifier("your_reusable_identifier", forIndexPath: indexPath) as! MyCustomView
cell.lblName.text = "MyNewName"
return cell
}
}
//2导入UIKit
@IBDesignable class MyCustomView: UICollectionViewCell {
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var btnClick: UIButton!
@IBOutlet weak var myImageView: UIImageView!
var view:UIView!
@IBInspectable
var mytitleLabelText: String? {
get {
return lblName.text
}
set(mytitleLabelText) {
lblName.text = mytitleLabelText
}
}
@IBInspectable
var myCustomImage:UIImage? {
get {
return myImageView.image
}
set(myCustomImage) {
myImageView.image = myCustomImage
}
}
}
4条答案
按热度按时间7gs2gvoe1#
你可以这么做,
1.将
MyCustomView
类更改为UICollectionViewCell的子类,而不是UIView的子类。1.从
MyCustomView
中删除override init(frame : CGRect)
、required init?(coder aDecoder: NSCoder)
、func xibSetup()
和func loadViewFromNib() -> UIView
1.我真的不明白你是如何使用你的setter和getter为mytitleLabelText和myCustomImage。如果它没有用,摆脱它以及。
1.最后,在MyCustomView中只剩下IBOutlets。
1.为了更好地进行编码,请将名称从MyCustomView更改为MyCustomCell(可选)
1.转到您的xib,选择xib并将其类设置为MyCustomView。
1.在同一屏幕中,将文件所有者更改为托管collectionView的yourView控制器
1.在viewController的ViewDidLoad中注册您的笔尖。
1.在索引路径项的单元格中,
1.最后,为了控制单元格的大小,要么覆盖collectionView的委托,要么直接转到您的collectionView,选择其中的collectionCell并拖动它以匹配您的维度:)就是这样:)
愉快的编码。搜索教程以获得更好的理解。我不能解释所有的委托,因为我将在这里写博客。
rdlzhqv92#
适用于Swift 4.0
在视图Did加载中:
在索引路径处的单元格项目中:
并且不要忘记在xib节中为您的自定义单元格设置标识符。
6ojccjat3#
如果必须配准多个单元格,则使用一行方法。
使用步骤
1.将您的小区标识符命名为
"YourcellName" + "Identifier"
,例如:CustomCellIdentifier
(如果单元格名称为CustomCell)。CustomCell.register(for: collectionView)
n6lpvg4x4#
对于viewDidLoad中的Swift 4.2
在索引路径处的单元格中:
当然,正如@Raj Aryan所说:别忘了在xib部分为你的自定义单元设置标识符。