Gian
Gian

Reputation: 1213

UITableView - Interaction with the table view disappearing everything

I have a UITableView, and added it as a subview of a UIView. Whenever I select a cell that had everything disappears in UITableView.

Already had this problem at other times, however it stopped happening without changes on code.

Currently I use Swift, however already happened in Objective-C.

Code:

TableView delegates:

numberOfSectionsInTableView
numberOfRowsInSection
cellForRowAtIndexPath
heightForRowAtIndexPath
didSelectRowAtIndexPath

Also registered the identifier of the cell

override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")

        listObjectsToList = ["String 1","String 2","String 3"]

        self.view.frame.size = CGSizeMake(300, 110)
        self.view.layer.cornerRadius = 5
        self.view.layer.masksToBounds = true

        self.tableView.scrollEnabled = false
    }

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listObjectsToList.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell: UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell
        cell.textLabel.text = listObjectsToList.objectAtIndex(indexPath.row) as? String
        return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 40
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
        let objectSelected: AnyObject = listObjectsToList.objectAtIndex(indexPath.row)
        object.type = objectSelected as String
        self.view.removeFromSuperview()
    }

However the method didSelectRowAtIndexPath is not called...

Code adding tableview:

        var listTypeTableViewController = ListTypeTableViewController()
        listTypeTableViewController.view.frame = CGRectMake(10, 80, 300, 130)
        self.view.addSubview(listTypeTableViewController.view)

I have tried:

        var listTypeTableViewController = ListTypeTableViewController()
        listTypeTableViewController.view.frame = CGRectMake(10, 80, 300, 130)
        self.view.addSubview(listTypeTableViewController.tableView)

But without success

Upvotes: 1

Views: 1823

Answers (2)

Gian
Gian

Reputation: 1213

The problem was and I was just trying to extract the UITableView to show it. When I need to add a UITableViewController as a child of my UIViewController:

var listTypeTableViewController = ListTypeTableViewController(nibName: "TableViewTypeScheduling", bundle: nil)        
listTypeTableViewController.view.frame = CGRectMake(10, 80, 300, 130)        
addChildViewController(listTypeTableViewController)
view.addSubview(listTypeTableViewController.view)

Upvotes: 2

Michał Ciuba
Michał Ciuba

Reputation: 7944

The reason is this line in tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) method:

self.view.removeFromSuperview()

You remove a view and all of its superviews, including the table view.

Upvotes: 0

Related Questions