ios - Subclassing UITextField with self.delegate causes app to freeze, CPU spikes to 100% -



ios - Subclassing UITextField with self.delegate causes app to freeze, CPU spikes to 100% -

i have subclass of uitextfield sets self.delegate = self. subclass used prevent special characters beingness entered uitextfield. @ first works fine, after few keys pressed cpu spikes 100% , freezes app. there no crash log in xcode because app never crashes, stays frozen until stop it. after research, have determined problem setting delegate self - apparently should create separate delegate uitextfield? have searched online cannot find useful on how this.

my acceptedcharacters subclass:

acceptedcharacters.h #import <uikit/uikit.h> @interface acceptedcharacters : uitextfield <uitextfielddelegate> @end

and

acceptedcharacters.m #import "acceptedcharacters.h" #define acceptable_characters @" abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789_." @implementation acceptedcharacters - (void)awakefromnib { [super awakefromnib]; if (self) { self.delegate = self; } } - (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string { //nslog(@"acceptedcharacters"); // restrict special characters nscharacterset *cs = [[nscharacterset charactersetwithcharactersinstring:acceptable_characters] invertedset]; nsstring *filtered = [[string componentsseparatedbycharactersinset:cs] componentsjoinedbystring:@""]; homecoming [string isequaltostring:filtered]; } @end

similar questions have found on stack overflow:

application freezes after editing custom uitextfield

uitextfield delegate jumping 100% cpu usage , crashing upon using keyboard shortcut

why uitextfield lock when setting delegate

i have read through solutions quite vague beginner. appreciate amend code below or point me in direction of tutorial or documentation? in advance.

edit:

i have tested code on 1 of viewcontrollers , works fine when conforming uitextfielddelegate protocol , when textfield delegates set self (see snippet below).

in viewdidload method:

self.forenamefield.delegate = self; self.surnamefield.delegate = self; self.addline1field.delegate = self; self.addline2field.delegate = self; self.addline3field.delegate = self; self.addline4field.delegate = self; self.addline5field.delegate = self; self.postcodefield.delegate = self; self.tellandfield.delegate = self; self.telmobfield.delegate = self; self.emailfield.delegate = self; self.dobfield.delegate = self; self.ninumfield.delegate = self;

i rather create several subclasses of uitextfield , phone call them on specific textfields rather have messy method 1 below.

#define acceptable_characters @" abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789_." #define numbers_only @"1234567890" #define character_limit 11 - (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string { // restrict special characters nscharacterset *cs = [[nscharacterset charactersetwithcharactersinstring:acceptable_characters] invertedset]; nsstring *filtered = [[string componentsseparatedbycharactersinset:cs] componentsjoinedbystring:@""]; // convert postcode field characters uppercase if (textfield == self.postcodefield) { [textfield settext:[textfield.text stringbyreplacingcharactersinrange:range withstring:[string uppercasestring]]]; homecoming no; } // set max character limit on tel fields if (textfield == self.telmobfield || textfield == self.tellandfield) { nsuinteger newlength = [textfield.text length] + [string length] - range.length; nscharacterset *cs = [[nscharacterset charactersetwithcharactersinstring:numbers_only] invertedset]; nsstring *filtered = [[string componentsseparatedbycharactersinset:cs] componentsjoinedbystring:@""]; homecoming (([string isequaltostring:filtered])&&(newlength <= character_limit)); } //return yes; homecoming [string isequaltostring:filtered]; }

try instead:

@interface mytextfield : uitextfield - (bool)stringisacceptable:(nsstring *)string inrange:(nsrange)range; @end @implementation mytextfield - (bool)stringisacceptable:(nsstring *)string inrange:(nsrange)range { nscharacterset *cs = [[nscharacterset charactersetwithcharactersinstring:acceptable_characters] invertedset]; nsstring *filtered = [[string componentsseparatedbycharactersinset:cs] componentsjoinedbystring:@""]; homecoming [string isequaltostring:filtered]; } @end @interface postalcodetextfield : mytextfield @end @implementation postalcodetextfield - (bool)stringisacceptable:(nsstring *)string inrange:(nsrange)range { [self settext:[self.text stringbyreplacingcharactersinrange:range withstring:[string uppercasestring]]]; homecoming no; } @end .. more subclasses

then assign view controller delegate , in view controller:

- (bool)textfield:(uitextfield *)textfield shouldchangecharactersinrange:(nsrange)range replacementstring:(nsstring *)string { if ([textfield iskindofclass:[mytextfield class]]) { homecoming [(mytextfield *)textfield stringisacceptable:string inrange:range]; } homecoming yes; }

ios objective-c delegates subclass uitextfielddelegate

Comments

  1. Ios - Subclassing Uitextfield With Self.Delegate Causes App To Ze,
    Cpu Spikes To 100% - >>>>> Download Now

    >>>>> Download Full

    Ios - Subclassing Uitextfield With Self.Delegate Causes App To Ze,
    Cpu Spikes To 100% - >>>>> Download LINK

    >>>>> Download Now

    Ios - Subclassing Uitextfield With Self.Delegate Causes App To Ze,
    Cpu Spikes To 100% - >>>>> Download Full

    >>>>> Download LINK mG

    ReplyDelete

Post a Comment

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -