Ios 加载自定义子视图';从程序上看,就像是细胞一样?
我以前有一个带有自定义单元格的tableView,显示商店:Ios 加载自定义子视图';从程序上看,就像是细胞一样?,ios,swift,uitableview,uiview,swift2,Ios,Swift,Uitableview,Uiview,Swift2,我以前有一个带有自定义单元格的tableView,显示商店: func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell : shopsTableViewCell = tableView.dequeueReusableCellWithIdentifier("shopCell", forIndexPath:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : shopsTableViewCell = tableView.dequeueReusableCellWithIdentifier("shopCell", forIndexPath: indexPath) as! shopsTableViewCell
但是,由于我们在主视图中添加了一个滚动视图,并且苹果不建议/允许混合使用scrollView
和tableView
,因此我删除了table视图,并将自定义单元格替换为自定义UIView
。
我想继续做同样的行为:
1-检测数组中有多少个值。
2-为每个数组索引实例化UIView
3-使用图像、位置、约束等值设置UIView
4-将其添加到当前视图
我正在使用序列图像板,但我看不到如何从序列图像板实例化自定义UIView。此外,此UIView是ViewController内部的子视图
我使用Outlet进行了自定义UIView课程:
import Foundation
import UIKit
class connectedShop : UIView{
@IBOutlet weak var bannerViewHight: NSLayoutConstraint!
@IBOutlet weak var bannerViewTop: NSLayoutConstraint!
@IBOutlet weak var bannerViewLeft: NSLayoutConstraint!
@IBOutlet weak var bannerViewRight: NSLayoutConstraint!
@IBOutlet weak var banerDiscount: UIImageView!
@IBOutlet weak var bannerImageShop: UIImageView!
@IBOutlet weak var bannerTitle: UILabel!
@IBOutlet weak var bannerDescription: UILabel!
@IBOutlet weak var bannerButton: UIButton!
@IBAction func bannerButtonAction(sender: UIButton) {
}
}
在我的故事板中,我已将子视图“connected shop”连接到此自定义类。还将情节提要Id设置为customView:
我想实例化这个自定义子视图,每个连接的商店一个,就像我在tableView中所做的那样。
我试过这个,但它坏了
let storyBoard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let viewController = storyBoard.instantiateViewControllerWithIdentifier("customView")
我还尝试创建一个新的自定义类,不带插座:
import Foundation
import UIKit
class customShop : UIView{
var bannerViewHight: NSLayoutConstraint!
var bannerViewTop: NSLayoutConstraint!
var bannerViewLeft: NSLayoutConstraint!
var bannerViewRight: NSLayoutConstraint!
var banerDiscount: UIImageView!
var bannerImageShop: UIImageView!
var bannerTitle: UILabel!
var bannerDescription: UILabel!
var bannerButton: UIButton!
}
试着这样做:
var connectedShop : customShop = customShop()
connectedShop.bannerTitle.text = "custom Shop"
self.view.addSubview(connectedShop)
但它因这个错误而崩溃:
fatal error: unexpectedly found nil while unwrapping an Optional value
有人能帮我吗?尝试加载nib并将其转换到您的课堂:
let shopVw = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("customView") as! shopViewController
self.navigationController?.pushViewController(shopVw, animated: true) // this is the code for navigation
let view = NSBundle.mainBundle().loadNibNamed("YourClassView", owner: self, options: nil).first as! YourClassView
警告:您可以在
viewDidLoad
中加载xib,但您应该在viewWillLayoutSubviews
中使用视图进行操作,以便设置并运行约束,从而使视图大小正确。尝试加载nib并将其强制转换到类:
let view = NSBundle.mainBundle().loadNibNamed("YourClassView", owner: self, options: nil).first as! YourClassView
警告:您可以在
viewdiload
中加载xib,但是您应该在viewWillLayoutSubviews
中使用视图进行操作,以便设置和运行约束,从而使视图大小适当。我认为这是导航问题我认为是导航问题我的自定义视图类继承自UIView。您的代码是针对UIViewController的,但我有一个UIView,我遇到了以下错误:无法将“connectedShop”类型的值转换为预期的参数类型“UIViewController”,我的自定义视图类继承自UIView。您的代码是针对UIViewController的,但我有一个UIView,我遇到了以下错误:无法将“connectedShop”类型的值转换为预期的参数类型“UIViewController”,我遇到了崩溃。我认为这是因为我试图实例化的子视图位于故事板中的场景中,而不是nib文件中。***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在名为“customView”的捆绑包中加载NIB:“NSBundle(loaded)”我发生崩溃。我认为这是因为我试图实例化的子视图位于故事板中的场景中,而不是nib文件中。***由于未捕获异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在名为“customView”的捆绑包:“NSBundle(loaded)”中加载NIB”