2017-08-11 152 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'類型的值) –