Preventing Paste in UITextField

Suppose that your app has a custom keyboard (or component) which populates an UITextField. So… suppose that you need to enable the User Interaction with that control. However, you don’t wanna anyone pasting values right there… because you wanna force the user to rely on your custom keyboard.

UITextField lacks a ‘disablePaste’ property. In order to do this, we’re gonna need to subclass UITextField. Our subclass should look like this…

@interface MyTextField : UITextField
{
BOOL _disablePaste;
    BOOL _disableCut;
    BOOL _disableSelect;
}

@property (nonatomic, assign) BOOL disablePaste;
@property (nonatomic, assign) BOOL disableCut;
@property (nonatomic, assign) BOOL disableSelect;

@end

Nice, ha!?. Let’s see the actual implementation, now!:

@implementation MyTextField

@synthesize disablePaste    = _disablePaste;
@synthesize disableCut      = _disableCut;
@synthesize disableSelect   = _disableSelect;

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if ( _disablePaste && action == @selector(paste:) )
    {
        return NO;
    }
    else if ( _disableCut && action == @selector(cut:) )
    {
        return NO;
    }
    else if ( _disableSelect && (action == @selector(select:) || action == @selector(selectAll:)) )
    {
        return NO;
    }
    else
    {
        return [super canPerformAction:action withSender:sender];
    }
}

@end

UIView with Rounded Corners

Sooner rather than later, you’ll probably end up with a simple yet tricky requirement: an UIView with rounded corners.

iOS SDK has no ‘radius’ property. Ohhh wait!. Yeah, it actually has!. But the catch to it is that you need to import Quartz framework, first:

#import <QuartzCore/QuartzCore.h>

Also, you need to link the ‘QuartzCore.framework’. Otherwise the import won’t work.

So… how do you actually display an UIView with rounded corners?. Easy!

[_someView.layer setCornerRadius:6];

See?. Just a line of code. Kung fu isn’t about a lot of spaghetti code. It’s about knowing what to do!

Removing Push Notifications from NotificationBar

I have come up with a weird problem…. which goes as follows:

  1. The app receives a Push Notification.
  2. You tap over the PN (in the iOS notification center).
  3. The app gets launched… and you handle the notification
  4. Problem: the notification remains in the ‘notification bar’.

How do you clean it ?. Well… this isn’t in Apple’s docs. But i’ve figured out that if you execute the following line of code, the notification ‘gets acknowledged’:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

Nice, ha?.

 

JSON Parsers

XML days are numbered…. it’s just my opinion. I know, it’s out there in the wild, almost everywhere. But XML itself has a huge overhead, which is something we, as mobile software developers, really want to avoid.

Personally, i just love json. It’s extremely lightweight… and i dare to say, it is what XML should have been. Why is it exactly that you need to repeat a keyword once and over and over…???. I still don’t get what those guys were thinking… when they wrote the XML specs.

Allright. Enough with bashing outdated standards!. How do we parse / serialize JSON ?.  Apple itself has a parser / serializer. But there are faster alternatives.

NXJson was written by a friend of mine. Although it’s not the fastest parser out there, it’s pretty amazing. Go get it, it’s under MIT license, so you’re free to use it anywhere. And good news… it also works on Mac!

The second alternative is JSONKit. That is indeed the fastest parser in the market. Which one to get?. Both are free… just download them both, and study their source code. That’s the coolest thing about open source. Your skills can increas substantially just by reading other’s work.

And at some point… we should return something to the community…!!.

HTML Color to UIColor

This is a nice tool i’d like to share with you. While skinning your app, you might need to convert HTML color codes into those that are actually accepted by UIKit framework (which, by the way, is HEX!).

So… you need to fire Photoshop, or find a website that does that for you. Well, i just found a nice app called HexColors. It’s in the Mac AppStore, and it’s free (go get it!).

It allows you to convert html colors, straightforward, into an ObjectiveC NSColor… which, by the way, looks like this:

[NSColor colorWithCalibratedRed:0xFF/255.0 green:0xFF/255.0 blue:0xFF/255.0 alpha:0xFF/255.0]/* FFFFFFFF */

So… if you’re also working on iOS, you just need to weak that sentence to look like this:

[UIColor colorWithRed:0xFF/255.0 green:0xFF/255.0 blue:0xFF/255.0 alpha:0xFF/255.0]/* FFFFFFFF */

I know. That’s an extra step you have to take. There is also another version that actually has UIColor support, but it’s a paid app… and… i don’t mind replacing two words… it’s not THAT much, right?.

I hope you find it useful!