Move XIB into storyboard

Lately i run into some trouble when i tried to integrate a viewcontroller from another project to a new one.

As usual i dragged the files (classes + XIB) to the new project, added a new uiviewcontroller to the storyboard and set the class to the newly imported.
Starting the app i was greeted with an empty white view and the content of the XIB was ignored.

After some googling i found the needed trick: a view is is added automatically when you add a UIViewController to your storyboard:

Screen Shot 2015-11-27 at 12.18.46

I had to delete this “view”.

When the storyboard-engine does not get a view for the controller it falls back to looking for a XIB with the same name as the class.

 

 

animating positions in autolayout

Animations in Swift are pretty straight forward:

UIView.animateWithDuration(0.5, delay: 0.1, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in                          
  self.lbl.alpha = 0.0;
}, completion: { (finished: Bool) -> Void in
   self.lbl.hidden = true
})

but if the position of an element was done by “autolayout” the order is a bit more tricky.

Step 1: you need to set up the connection in “Interface Builder” to a member like this:

@IBOutlet var topConstraint:NSLayoutConstraint!;

Step 2: the animation:

// recommended, although probably not neccesary
self.view.layoutIfNeeded() 

self.topConstraint.constant = -30.0;
UIView.animateWithDuration(annitime, delay: 0.1, options: UIViewAnimationOptions.TransitionNone, animations: { () -> Void in
self.view.layoutIfNeeded()
                    }, completion: { (finished: Bool) -> Void in
                        
                })

valid as of Swift 2.1, found here

moving to SWIFT (slowly…)

I’m learning swift. And these series of posts is about the troubles i am facing. Mostly because i did not spend enough time to completely understand the documentation, but also because swift changes fast and LOTS of examples and posts on the internet are already out of date.

For example i found heaps of broken “cellForRowAtIndexPath” implementations.

This one does work(as of today….):

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cellIdentifier = "TableCell1"
        var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
        
        if (cell==nil) {
            cell = UITableViewCell.init(style: .Subtitle, reuseIdentifier: cellIdentifier)
            
        }
        cell?.textLabel?.text = "CellTextlabelText\(indexPath.row)"
        return cell!
    }

Another one that was more difficult than anticipated was “prepareForSegue”

    override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {

            let next:ListeTableView = segue!.destinationViewController as! ListeTableView
        
            next.daten = self.daten
        
    }

both viewcontrollers have an array of Objects as a member:

import UIKit

class ListeTableView: UITableViewController {
    
    var daten: [Shops] = []
    
// more....


}