2017-08-11 148 views
0

我正在尝试实现Koloda卡片滑动样式。我创建了一个.xib文件,结构如图1 & 2. xib file structure无法将IBOutlet连接到XIB文件

正如您在Image 1中看到的那样,我已将File's Owner设置为XIB Files自定义类。

在图像2,我已经离开了类空(不知道这是正确的)

我的NIB类是按下面的代码。

import UIKit 
import Koloda 

class CardView: KolodaView { 

var view: UIView! 
var nibName: String = "CardView" 
var uid: String! 

@IBOutlet weak var profileImage: UIImageView! 
@IBOutlet weak var nameLabel: UILabel! 

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

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

func setUp() { 

    view = loadViewFromNib() 

    view.frame = bounds 
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.isUserInteractionEnabled = true 
    addSubview(view) 

} 

func loadViewFromNib() -> UIView { 
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 

    return view 
} 
} 

在我的控制器中,我有以下的索引视图;

func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView { 

    _ = userResults[Int(index)] 

    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 

    return view 
} 

我无法插入我的IBOutlets并将它们引用到我的UIViewController中。因为我将获得geoFire & FirDatabase信息并填充视图。我知道这与文件所有者有关。我只是不确定如何将IBOutlets设置为子视图而不是自定义类。

任何帮助表示赞赏。

+0

为什么你让'koloda'方法返回一个'UIView',因为你的目标是得到'CardView'? –

+0

我首先猜测CardView是XIB视图。并且不能显式调用setUp(),因为新的CardView将自身添加(视图初始化递归)。并且猜测你希望从xib到视图控制器本身的标签出口,你必须将文件所有者改变到你想要出口的视图控制器。 – snjmhj

+0

@snjmhj这是正确的。我相信网点必须添加到CardView类而不是ViewController。 –

回答

0

  1. Class is now;

    import UIKit 
    
    class CardView: UIView { 
    
    var uid: String! 
    
    @IBOutlet weak var profileImage: UIImageView! 
    @IBOutlet weak var nameLabel: UILabel! 
    
    } 
    
  2. 删除文件所有者

  3. CardView在厦门国际银行现在设置为CardView
  4. viewForCardAt是现在;

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView { 
    
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView 
    
    let users = userResults[Int(index)] 
    
    view.profileImage.sd_setImage(with: URL(string: users.userProfileURL)) 
    view.nameLabel.text = users.userName 
    view.uid = users.uid 
    
    return view 
    

    }

我现在有一个工作 “火种卡与大地定位” :)

0

尝试摆弄周围小时后最后CardView类设置为自定义类CardView而不是UIView的

+0

如果我改变loadViewFromNib - 让view = nib.instantiate(withOwner:self,options:nil)[0] as! UIView让view = nib.instantiate(withOwner:self,options:nil)[0] as! CardView和相同的 - viewForCardAtIndex我得到错误(无法转换'UIView'类型的值) –