2016-04-10 50 views
4

我在MySample.xib中創建了自定義UIView。我已將類MyView添加到xib的File Owner以編程方式從xib加載自定義UIView

MyView.swift

class MyView: UIView { 

    @IBOutlet var view: UIView! 

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

     setup() 
    } 

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

     setup() 
    } 

    func setup() { 
     NSBundle.mainBundle().loadNibNamed("MySample", owner: self, options: nil)    
     self.addSubview(self.view) 
    } 
} 

我現在載入這個MyViewMyController文件是這樣的:

MyController.swift

class MyController: UIViewController { 
    init() { 
     super.init(nibName: nil, bundle: nil) 

     view.addSubview(MyView()) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

我們顯示這種觀點,我正在使用以下代碼從另一個控制器' s UIButton

presentViewController(MyController(), animated: true, completion: nil) 

這會在屏幕上顯示視圖。但問題是,它不接受任何用戶交互。在我的自定義視圖中,我有一個UITableView,它顯示數據,但由於缺乏用戶交互,它不會滾動或輕敲。

任何想法我做錯了什麼?

+0

您是否使用了視圖層次結構檢查器來確保自定義視圖之上沒有任何內容? – EmilioPelaez

+0

@EmilioPelaez是的,我已經檢查過它,沒有什麼是最重要的。 – codelearner

+0

如果你在'MyView'上重寫'touchesBegan ...',會發生什麼?它會被叫嗎? 'userInteractionEnabled'是真的嗎? – EmilioPelaez

回答

8

你的例子中有一些不必要的東西。

我仍然不知道什麼是你想這樣做,但如果你想從廈門國際銀行添加自定義視圖到您的視圖控制器則:

  1. 創建一個XIB文件中的觀點,你不不需要重寫init,也不能使用默認的init UIView()從xib初始化視圖,所以請從MyView類中刪除init方法。

  2. 在你的xib中,確保你在IB中看到的視圖是你想使用的類類型(我猜MyView類)。

  3. 在你看來INIT這樣的視圖控制器:

    class MyController: UIViewController { 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
    
         //Get all views in the xib 
         let allViewsInXibArray = NSBundle.mainBundle().loadNibNamed("MySample", owner: self, options: nil) 
    
         //If you only have one view in the xib and you set it's class to MyView class 
         let myView = allViewsInXibArray.first as! MyView 
    
         //Set wanted position and size (frame) 
         myView.frame = self.view.bounds 
    
         //Add the view 
         self.view.addSubview(myView) 
    
         //TODO: set wanted constraints. 
        } 
    } 
    
+0

現在我收到這個錯誤:***由於未捕獲的異常終止應用程序NSUnknownKeyException ',原因:'[ setValue:forUndefinedKey:]:這個類不是關鍵值編碼兼容的關鍵標籤。'' – codelearner

+0

你可能在xib中有不好的連接,我建議你先從一個新的xib,如果可能的話,首先創建新的xib,將視圖的類設置爲相關的視圖類,設置一些背景顏色,並看到它的工作。 –

+0

不必使用'self'作爲所有者,而必須使用'MyView()'將所有事件傳遞給視圖鏈接到的MyView類。 – codelearner

0

相反廈門國際銀行File's Owner類鏈接到MyView的,我必須要改變類根鑑於廈門國際銀行,以MyView。基於@Oleg謝爾曼代碼,然後,它加入MyView()作爲所有者獲得所有它的活動的小變化完美的作品,否則會引發錯誤this class is not key value coding-compliant for the key ****.

let allViewsInXibArray = NSBundle.mainBundle().loadNibNamed("MySample", owner: MyView(), options: nil) 

使用File's OwnerMyView當您必須使用Storyboard中的xib時,需要

不知道是否有解決方法使用File's Owner類到MyView當編程從自定義控制器加載xib像我原來的問題。

+0

在我的情況下...這對我有用......我只是將我的主人更改爲我的xib類。 :let mCuentasView = Bundle.main.loadNibNamed(「CajaAhorroView」,owner:self.mContainerCuenta,options:nil)![0] as! UIView self.mContainerView.addSubview(mCuentasView) mCuentasView.frame = self.mContainerView.bounds – xhinoda

相關問題