ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

Disable Blinking Cursor in iOS UITextField

Updated on October 21, 2012

(c) 2012 kevin languedoc (klanguedoc)

This solution will allow an UIDatePicker to update an UItextField while having no blinking cursors in the UITextField in an iPhone app. When a user clicks on the UITextField, a UIDatePicker will display on screen to allow a user to select a date. The UITextField will get updated while never having a cursor blink the field.

Project Setup & Storyboard

For this simple project, I chose a Single View Controller. Once the project is created, open the storyboard and add a UITextField and select the Attributes inspector and disable the field by unselecting the “enabled” attribute.

Next open the corresponding view controller header file by selecting the Assistant editor and Ctlr+drag a connection from the UITextField to the open header file, between the @interface and @end directives. Name the IBOutlet connection displayDate. The code is displayed in the liViewController.h code listing below.

Next Add a UILabel and overlay it on the UITextField, take a look at the following screenshot. Remove the text from the UIlabel from in the Attributes inspector. You can’t add an IBAction from the UILabel but you can enable the “User Interaction Enabled” attribute in the Attributes inspector. Also set the tag value to 1. We will use this value later in the view controller custom class to detect when it is clicked and respond accordingly.

This screenshot show the overlaid UILabel on the UITerxtField UIControl. It won't be visible to the user when the app is running.
This screenshot show the overlaid UILabel on the UITerxtField UIControl. It won't be visible to the user when the app is running. | Source

liViewController (.h & .m)

Since the UILabel is part of the UIView and the latter implements the UIResponder which implements the standard events in an UIControl, we can implement one of the events and capture the user click event on the transparent UILabel. Open the ViewController custom class and add the touchesBegan event of the UIResponder. See the code listing below. The NSSet argument is the UIControl that is touched.

Next we will implement this event in the implementation file along with the method that will update the UITextField. In the -(void)touchesBegan:(NSSet*)trigger withEvent:(UIEvent*)event method in the implementation file, start by creating an UITouch object and assign it the trigger anyObject property. See the code below. We then check if the tag of the touched object corresponds to the tag of the UILabel UIControl. If it does, declare a CGRect object which will be the frame that will contain the UIDatePicker that we will add programmatically to the UIview. For this example, I am using the following coordinates: 0,220,320,216. This means x=0, y=220, width=320 (full width) and height=216 (standard size of the UIDatePicker).

Then we will create an UIDatePicker, datePicker, object and add it to the CGRect frame. Finally we will assign the event to the UIDatePicker to call the dateSelected when the value has changed. To complete this method implementation, add the datePicker to the view as a subview. Again take a look the code below on the implementation.

liViewController.h

//
//  liViewController.h
//  ModalDatePicker
//
//  Created by Kevin Languedoc on 10/20/12.
//  Copyright (c) 2012 Kevin Languedoc. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface liViewController : UIViewController
@property (strong, nonatomic) IBOutlet UITextField *displayDate;


-(void)touchesBegan:(NSSet*)trigger withEvent:(UIEvent*)event;


@end

liViewController.m

//
//  liViewController.m
//  ModalDatePicker
//
//  Created by Kevin Languedoc on 10/20/12.
//  Copyright (c) 2012 Kevin Languedoc. All rights reserved.
//

#import "liViewController.h"

@interface liViewController ()

@end

@implementation liViewController

@synthesize displayDate;

-(void)touchesBegan:(NSSet*)trigger withEvent:(UIEvent*)event{
    UITouch *touch = [trigger anyObject];
    
    if(touch.view.tag == 1){
        CGRect pickerFrame = CGRectMake(0,220,320,216);
        UIDatePicker *pickDate = [[UIDatePicker alloc]initWithFrame:pickerFrame];
        
        [pickDate addTarget:self action:@selector(dateSelected:)forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:pickDate];}
    }
    



-(void)dateSelected:(id)sender{

    NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
    [fmtDate setDateFormat:@"yyyy/MM/dd" ];
    displayDate.text = [fmtDate stringFromDate:[sender date]];
}


- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setDisplayDate:nil];
    [self setDisplayDate:nil];
   

    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}


@end

dateSelected

To finish up, add the -(void)dateSelected:(id)sender method. Notice the (id)sender, this will capture the sender object, which in the example is the date from the UIDatePicker. Next add a NSDateFormater so that we can format the date as needed and convert the date to a string so that it can be assigned to the displayDate UITextField text property.

There you have it. A very simple solution to remove the blinking cursor from an UITextField. By no means is this the only way to do this, but it is a simple and novel solution.

Comments

    0 of 8192 characters used
    Post Comment

    No comments yet.

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, hubpages.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://hubpages.com/privacy-policy#gdpr

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)