Skip to content

Instantly share code, notes, and snippets.

@andytlr
Last active July 16, 2018 07:35
Show Gist options
  • Select an option

  • Save andytlr/9bb208cb7d36b8914180 to your computer and use it in GitHub Desktop.

Select an option

Save andytlr/9bb208cb7d36b8914180 to your computer and use it in GitHub Desktop.
Swift Snippets

Make Xcode Editing More Like Atom/Sublime

Go to Settings > Keybindings to remap or add keyboard shortcuts. When removing existing keybindings, don't press the keyboard Delete key, click the icon. Some keybindings can't be deleted ¯\_(ツ)_/¯; remap these to keybindings that are available.

Multiple Selection

Xcode has something called "Edit All in Scope" (ctrl + cmd + e). It's similar but just selects all instances of the selected text.

Open Quickly

command + shift + o

Delete Line & Duplicate Line

There aren't actually commands for Delete Line and Duplicate Line, but you can edit a plist file to chain multiple actions together into one command. After editing the .plist you can add a shortcuts in Settings > Keybindings.

Path: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

<key>Custom</key>
<dict>
  <key>Delete Line</key>
  <string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>
  <key>Duplicate Line</key>
  <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
</dict>

Move Line

There are commands for Move Line Up and Move Line Down (cmd + option + [/]).

More shortcuts

This NSHipster Article covers a lot of other shortcuts.

// Set light status bar
////////////////////////////////////////////////////////////////////////////////
// In the plist file, set `View controller-based status bar appearance` to `NO`
// Then in viewDidLoad()
UIApplication.sharedApplication().statusBarStyle = .LightContent
// Make a scroll view with a big image scroll
////////////////////////////////////////////////////////////////////////////////
// Tell the scrollView to be the same size as the imageView.
scrollView.contentSize = imageView.frame.size
// Or, set it to a pixel size.
scrollView.contentSize = CGSize(width:375, height:1857)
// Control a child view controller from a parent.
////////////////////////////////////////////////////////////////////////////////
// Define the first `[0]` of the child view controllers with the class name
// ChildViewControllerClassName as a variable childVC.
// Won't always need the `self.`
let childVC = self.childViewControllers[0] as! ChildViewControllerClassName
// put `childVC.` before the var you want to control from the child VC.
childVC.thingToControl.alpha = 1
// Go Back in Code
////////////////////////////////////////////////////////////////////////////////
// Dismiss a modal
dismissViewControllerAnimated(true, completion: nil)
// Go back in the history stack.
navigationController!.popViewControllerAnimated(true)
// Do stuff when going back to a view
////////////////////////////////////////////////////////////////////////////////
// viewDidLoad() only runs the first time a view loads. If you push the pop a
// view and want to run some code try viewDidAppear() or viewWillAppear()
override func viewDidAppear(animated: Bool) {
}
// Set scroll position
////////////////////////////////////////////////////////////////////////////////
let scrollTo = CGPointMake(0.0, 57.0)
scrollView.setContentOffset(scrollTo, animated: true)
// In viewDidLoad() to hide a search bar or something like that.
// Pass a variable on Segue
////////////////////////////////////////////////////////////////////////////////
// In the view controller that I want to receive the variable,
// set an empty variable and give it a type.
var emptyVariableInDestinationViewController: Bool!
// In Source View Controller
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
// Set the destination view controller name at the end of this line.
let destinationVC = segue.destinationViewController as! DestinationViewControllerClassName
// Give it a value at the end of this line.
destinationVC.emptyVariableInDestinationViewController = thingIWantToSetItTo
}
// Autolayout getting f-d up?
////////////////////////////////////////////////////////////////////////////////
self.automaticallyAdjustsScrollViewInsets = false
// in view did load
// Get scroll position
////////////////////////////////////////////////////////////////////////////////
// See this commit: https://github.com/andytlr/dropbox-carousel/commit/be0ed5dcdc50491995c9e4e1d43e7e21e4ae7dfa
// Gesture recognizer stuff
////////////////////////////////////////////////////////////////////////////////
// Most common properties in a gesture. These are CGPoints, add .x or .y for axis.
let location = sender.locationInView(view)
let translation = sender.translationInView(view)
let velocity = sender.velocityInView(view)
// States (go inside the gesture recognizer method)
if sender.state == .Began {
// Runs once on start of gesture
}
if sender.state == .Changed {
// Runs constantly as the gesture changes
}
if sender.state == .Ended {
// Runs once when the gesture ends
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment