2016-07-18 5 views
1

я использую, чтобы были Tableview с заказными клетками, показывая магазины:Загружать пользовательские SubView программно, как если бы они были Cells?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell : shopsTableViewCell = tableView.dequeueReusableCellWithIdentifier("shopCell", forIndexPath: indexPath) as! shopsTableViewCell 

Но так как мы добавили вид прокрутки в главном окне, и яблоко не рекомендую/позволяют смешивать scrollView и tableView, я удалил таблицу и заменил пользовательские ячейки пользовательскими UIView. Я хотел бы продолжить то же поведение: 1 - определить, сколько значений находится внутри массива. 2 - создать экземпляр UIView для каждого индекса массива 3 - установить UIView со значениями, такими как изображение, положение, ограничения и т. Д. 4 - Добавить его в текущий вид.

Я использую раскадровку, и я не вижу, как создать экземпляр UIView из раскадровки. Также этот UIView представляет собой подвид, который находится внутри ViewController.

Я сделал пользовательский класс 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) { 

    } 

} 

В моей раскадровке я соединил подвид «подключенный магазин» для этого пользовательского класса. Также установите раскадровку Id в customView:

enter image description here

Я хочу, чтобы создать экземпляр этого пользовательского подвида, по одному для каждого подключенного магазина, как я использую, чтобы сделать в 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 

Может ли кто-нибудь помочь мне с этим?

+0

Я думаю, что это проблема навигации –

ответ

0
let shopVw = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("customView") as! shopViewController 
self.navigationController?.pushViewController(shopVw, animated: true) // this is the code for navigation 
+0

Мой пользовательский класс вида наследуется от UIView. Ваш код предназначен для UIViewController, но у меня есть UIView, и я получаю эту ошибку: Невозможно преобразовать значение типа 'connectedShop' в ожидаемый тип аргумента 'UIViewController' – user3033437

0

Попробуйте загрузить перо и бросить его в свой класс:

let view = NSBundle.mainBundle().loadNibNamed("YourClassView", owner: self, options: nil).first as! YourClassView 

Оговорка: вы можете загрузить XIB в viewDidLoad, но вы должны манипулировать с целью в viewWillLayoutSubviews, чтобы иметь ограничение набора и и поэтому ваш размер будет выглядеть правильно.

+0

У меня сбой. Причина, по которой я думаю, заключается в том, что subView, который я пытаюсь создать, находится внутри сцены в раскадровке, а не в файле nib. *** Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Не удалось загрузить NIB в пакете:« NSBundle (загружен) »с именем« customView »' – user3033437