2015-09-14 5 views
1

У меня проблема, у меня есть контроллер, а в viewdidload я пытаюсь загрузить подвью, созданный из xib-файла.SWIFT TableView не отвечает

Мой «пользовательский» подвид хорошо добавлен к моему первому контроллеру, но tableview не отвечает ... я имею в виду, что он не прокручивается, и когда я нажимаю на него, ничего не происходит ... (у меня нет реализован еще метод запуска действия при нажатии ячейки, но целле не выделяется при нажатии).

Вот код:



class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let v1 = MyViewTest(frame: CGRectZero) 

     v1.tableView.dataSource = self 
     v1.tableView.delegate = self 

     self.view.addSubview(v1) 


    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     //datasource method returning the what cell contains 
     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell") 
     //reusing the previous scrolled cells from table view(if any) 
     //cell.textLabel?.text = array[indexPath.row] 
     cell.textLabel?.text = "test" 
     //passing each elements of the array to cell 
     return cell 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     //datasource method returning no. of rows 
     return 14 
    } 


} 

здесь код в MyViewTest



class MyViewTest: UIView { 

    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var tableView: UITableView! 


    var view:UIView! 

    let nibName:String = "MyViewTest" 

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

    required init(coder aDecoder: NSCoder) { 
     //fatalError("init(coder:) has not been implemented") 
     super.init(coder: aDecoder) 
     setup() 
    } 


    func setup() { 
     view = loadViewFromNib() 

     let screenSize: CGRect = UIScreen.mainScreen().bounds 
     let sWidth = screenSize.width 
     let sHeight = screenSize.height 
     let xPos = sWidth/2-(view.bounds.width/2) 
     let yPos = sHeight/2-(view.bounds.height/2) 

     view.frame = CGRectMake(xPos, yPos, view.bounds.width, view.bounds.height) 

     addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 
     let bundle = NSBundle(forClass: self.dynamicType) 
     let nib = UINib(nibName: nibName, bundle: bundle) 
     let mview = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 

     return mview 
    } 


} 

в файле XIb, у меня есть только вид с меткой и мой TableView в файл XIB связан. с его классом (в идентификаторе).

enter image description here

Если вы знаете, почему мой взгляд таблицы не работает, было бы здорово ТНХ!

+0

похоже, что v1 может получить все штрихи, так как он находится поверх табличного обзора. Установите фон v1 на некоторый цвет (или используйте отладчик вида) и проверьте это. – JDM

+0

Я добавил экран печати моего xib-файла, у меня уже был цвет для v1 ... –

+0

Кажется, вы настроили кадр MyTestView на CGRectZero. Затем вы добавляете таблицу в качестве подзадачи этого представления с установленным размером кадра. Поскольку MyTestView имеет ширину и высоту 0, а значение по умолчанию для представления - не для подзапроса клипов, я думаю, вы можете увидеть таблицу, но не щелкнуть ее. Попробуйте настроить размер вашего MyTestView на размер экрана? –

ответ

0

Вы, кажется, установить рамку MyTestView к CGRectZero.

Затем вы добавляете свою таблицу в качестве подвидности этого представления с установленным размером кадра. Поскольку MyTestView имеет ширину и высоту 0, а значение по умолчанию для представления - не для подзапроса клипов, я думаю, вы можете увидеть таблицу, но не щелкнуть ее.

Попробуйте установить рамку вашего MyTestView на размер экрана?

0

Проблема возникает, потому что я создаю экземпляр MyViewTest с помощью CGRectZero. Если я использую CGRectMake, например, с фактической шириной и высотой, он отлично работает.

См Рори mckinnel пост чуть выше для более подробной информации :-)