2011-06-16 24 views
13

पता चला कि मैंने बहुत गुगल और हेरी की खोज की, लेकिन कुछ भी उपयोगी नहीं था।UITextField खो गया फोकस

मेरे पास दो टेक्स्टफील्ड हैं और मैं यह पहचानने में सक्षम नहीं हूं कि किसने फोकस खो दिया है।
मैंने सभी विकल्पों की कोशिश की, लेकिन कुछ भी नहीं।

यहाँ textFieldDidEndEditing:

- (void) textFieldDidEndEditing:(UITextField *)textField { 
    NSLog(@"%@", [textField state]); 
    NSLog(@"%d", [textField isSelected]); 
    NSLog(@"%d", [textField isFirstResponder]); 
    NSLog(@"%d", [textField isHighlighted]); 
    NSLog(@"%d", [textField isTouchInside]); 

    if (![textField isFirstResponder] || ![textField isSelected]) { 
    //if ([textField state] != UIControlStateSelected) { 
    NSLog(@"not selected!"); 
    [...] 
    // remove view/etc... 
    } 
} 

सभी NSLog रिटर्न 0! क्यूं कर?!?

मैं खोए गए फोकस का पता कैसे लगा सकता हूं? इस विधि ने हर बार कहा है कि मैं एक कीबोर्ड बटन दबाता हूं, न केवल अंत में!
क्या कोई विकल्प है?

संपादित:
मैं ग्रंथों से स्विच करने के लिए नहीं करना चाहते हैं, लेकिन मैं खो फोकस पता लगाने के लिए जब मैं स्क्रीन पर वैसे भी क्लिक करें। (कीबोर्ड खारिज कर देगा या नहीं और टेक्स्टफील्ड पर कैरेट मौजूद नहीं है)!

धन्यवाद।

उत्तर

3

बाहरी टेक्स्ट फ़ील्ड टैप करने के लिए आप ओवरराइड कर सकते हैं touchesBegan आपके विचार नियंत्रक में:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([textField1 isFirstResponder] && (textField1 != touch.view)) 
    { 
     // textField1 lost focus 
    } 

    if ([textField2 isFirstResponder] && (textField2 != touch.view)) 
    { 
     // textField2 lost focus 
    } 

    ... 
} 
+0

..और मैं दूसरे TextField क्या होता है पर क्लिक करते हैं?कुछ भी तो नहीं!!! – elp

+0

आप इसे पहले टेक्स्टर की जांच करके 'textFieldShouldBeginEditing' में संभाल सकते हैं: –

+3

यह बहुत विश्वसनीय नहीं है .. हर बार जब मैं किसी कारण से स्क्रीन पर somethign स्पर्श करता हूं तो स्पर्श करता है – abbood

-3

आप पाठ फ़ील्ड बना रहे हैं, उन्हें अलग टैग आवंटित:

#define kSomeTag 100 
textField.tag = kSomeTag; 

अपने में - (शून्य) textFieldDidEndEditing: (UITextField *) textfield विधि, आप बता सकते हैं जो पाठ फ़ील्ड पूछताछ की संपादन समाप्त हो गया है अपने टैग: textFieldShouldReturn विधि में

if (textField.tag == kSomeTag) { 
    // do something 
} 
+0

नहीं, क्योंकि जब मैं बाहर पाठ फ़ील्ड कुछ भी नहीं परिवर्तन क्लिक करें काम नहीं! टैग वही है, यह उदासीन है !!! – elp

2
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
     NSLog(@"%d",textFiled.tag); 
     NSInteger nextTag = textField.tag + 1; 
     UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
     if (nextResponder) { 
      [nextResponder becomeFirstResponder]; 
     } else {   
      [textField resignFirstResponder]; 
     } 
     return YES; 
    } 

UITextField टैग के साथ खो दिया था फोकस

यह आपको एक टेक्स्टफिल्ड से दूसरे में जाने में मदद करेगा .... बस सभी टेक्स्टफिल्ड्स में टैग को क्रमशः सेट करें: 0,1,2,3 .... आदि

+0

नहीं, नहीं, यह सही नहीं है !! इस तरह, मैं ध्यान केंद्रित खो दिया पाने के लिए जब मैं बिना उपयोग ShouldReturn पाठ फ़ील्ड के बाहर क्लिक करें सक्षम नहीं करते !! – elp

+1

मेरी राय के अनुसार, आपको लगता है कि के लिए कस्टम विधि बनाने के लिए होना चाहिए .. –

0

यह एक सीधा जवाब के बाद से आप जब ध्यान केंद्रित खोने कैसे संभाल करने के बारे में पूछा नहीं है। मुझे लगता है कि ऐसे समय होते हैं जब स्पष्ट रूप से सहेजने और खारिज करने के लिए बटन रद्द करना अच्छा होता है। खासकर एक टेक्स्ट व्यू पर जहां आप इसके इच्छित उपयोग के लिए रिटर्न कुंजी को संरक्षित करना चाहते हैं।

यह एक वर्ग है जो "पूर्ण" और "रद्द करें" बटन के साथ कुंजीपटल करने के लिए एक उपकरण पट्टी जोड़ता है। मेरे पास यह अभी आईओएस 8 में काम कर रहा है। मैं आईओएस के लिए काफी नया हूं इसलिए ऐसा करने के बेहतर तरीके हो सकते हैं। सुधारने के सुझावों पर हमेशा खुलासा करें।

DismissableTextView.h ...

#import <UIKit/UIKit.h> 

@interface DismissableTextView : UITextView 

@end 

DismissableTextView.m ...

#import "DismissableTextView.h" 

@implementation DismissableTextView 

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     [self setInputView]; 
    } 
    return self; 
} 

- (id) initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
    { 
     [self setInputView]; 
    } 
    return self; 
} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self setInputView]; 
} 

- (void) setInputView { 
    [self createToolbar]; 
} 
-(void) createToolbar { 

    // Create toolbar for the keyboard so it can be dismissed... 
    UIToolbar* toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    toolbar.barStyle = UIBarStyleDefault; 
    toolbar.items = [NSArray arrayWithObjects: 
          [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelClicked)], 
          [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
          [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneClicked)], 
          nil]; 
    [toolbar sizeToFit]; 

    self.inputAccessoryView = toolbar; 
} 

- (IBAction)didBeginEditDescription:(id)sender 
{ 
} 

-(void)cancelClicked{ 

    // respond to cancel click in the toolbar 
    [self resignFirstResponder]; 
} 

-(void)doneClicked{ 

    // respond to done click in the toolbar 
    [self resignFirstResponder]; 
} 

@end 
संबंधित मुद्दे