:  ~ 2 min read

UITextView and UITextField knobs; a story

UIKit does this really nice thing, where the user can tap around a text knob — with quite some margin, too — and still intercept the touch; but it appears that all knobs are created equal, but some are more equal than others; and so our story begins…

On one of our projects, the view for creating a challenge is full of UITextViews — almost all of them can have two rows or more, so we couldn’t use UITextFields. The default textContainerInsets were too big — at least vertically — so they were set to 0, at which point a problem arose: the knobs were cut off; and not only that, they weren’t interce […]

Continue reading →

:  ~ 1 min read

Card Virtual

A few months ago I was writing about a new beginning and I mentioned a couple of projects. I mentioned the first one in a previous post and now I'm writing about the second.

The main goal of the app is for users to save their fidelity cards digitally (or request new ones), combined with the conveniences of displaying merchants & their offers, and having a shopping list at hand. There's also a friends feature, with which users can share their shopping lists — shopping together, faster and smarter has never been easier!

It's targeted at the local, Romanian, market, but it should be possible to ad […]

Continue reading →

:  ~ 1 min read


2 years and a half ago, I was writing about how I recently started using Tower — didn't even realize it's been so long. In that post I was explaining how I solved the fact that it doesn't support opening Pull Requests. Well ... The latest version of Tower now supports it, and I gotta say they're as seamless as one would expect!

A few new features:

Continue reading →

:  ~ 9 min read

Observing and broadcasting

The usual solution to observe and broadcast is to use NotificationCenter:

final class Post { // 1

   var title: String
   var body: String

   init(title: String, body: String) {
      self.title = title
      self.body = body


extension Notification.Name { // 2

   static let LTHPostReceived = Notification.Name(rawValue: "com.rolandleth.com.postReceivedNotification")


final class PostCreationController: UIViewController { // 3

   private let post: Post

   // [...]

   private func savePost() { // 4
      // [...]

      let userInfo = ["post": post] // 5
      let notification = Not […]
Continue reading →

:  ~ 3 min read


A few months ago I was writing about a new beginning and I mentioned a couple of projects. I would like to present one of them today. It took longer than expected, but we launched today and we're really happy about the results. I'll start with a really short intro:

Our lives are filled with habits; some are good, some are bad. Everyone wants to get rid of their bad habits, and we all want to increase the number and/or frequency of good habits; we all want to eat healthier, do more sport, be more productive, or procrastinate less.

On the other hand, we humans are, by nature, a really sociable s […]

Continue reading →

:  ~ 3 min read

Easier NSLayoutConstraint interactions #2

In a previous post I talked about a new struct (LayoutPriority) and a couple of extension methods on NSLayoutConstraint to ease interacting with them. But, as I later discovered, there is no need for the new struct – we can do the same thing on UILayoutPriority itself. Let's quickly see how.

First, we move all the properties along with the operators to the extension:

extension UILayoutPriority {

   static let minNonZero = UILayoutPriority(rawValue: 1)
   static let belowDefaultLow = UILayoutPriority(rawValue: UILayoutPriority.defaultLow.rawValue - 1)
   static let defaultLow = UILayoutPriorit […]
Continue reading →

:  ~ 14 min read

Creating an interactive label

I would like to write about how you can create a label that detects and responds to various UIDataDetectorTypes. Well, we won't really make use of UIDataDetectorTypes, but NSTextCheckingResult, since we'll be using an NSDataDetector. We already have TTTAttributedLabel available, but if you need something much more lightweight, like I did, follow along.

We'll see how we can interact with URLs, but the class should be easily extendable after. Why not use a UITextView, those can do this already?, you might ask; and you'd be right. But UITextViews are expensive to create, and if you need them insi […]

Continue reading →

:  ~ 7 min read

Easier NSLayoutConstraint interactions

In Swift 4 UILayoutPriority has become a struct, with an initializer and a rawValue, instead of being a rawValue of Float itself. This means that simple assignments became slightly harder:

let constraint = someView.leadingAnchor.constraint(equalTo: otherView.leadingAnchor)
// Swift < 4
constraint.priority = 999
// Swift 4
constraint.priority = UILayoutPriority(rawValue: 999)

Besides this, I've always had a pet peeve – activating constraints that require priority manipulation:

  someView.leadingAnchor.constraint(equalTo: otherView.leadingAnchor),
  someView.trailin […]
Continue reading →

:  ~ 45 sec read

Runtime Sharks

One of my biggest dreams has always been to create a great product of my own, and/or be part of a great team that creates one. Today I took a step towards this dream, and I'm happy to announce that I started a small software company. For now it's mostly me, but I hope in time it'll grow. Such a mixture of feelings ...

Excited. Scared. Eager. Patient. Hard working. Tired. Restless. Hopeful.


By the end of the year we'll have two projects finished, and I can't wait to show them to you. Depending on the project and deadline, we might also be available for collaboration/hire, so don't hesitate to contact us.

Updated to Swift 4 and Vapor 2

Took a while, but it was a bit ... nostalgic 😁.

Please let me know if I missed anything.