2012-02-29 13 views
6

पर यूआईटीएक्स्टफिल्ड के बाहर क्लिक करता हूं तो मुझे पुन: साइन इन कैसे किया जाता है मुझे अपने आईफोन ऐप में कीबोर्ड प्राप्त करने में परेशानी हो रही है क्योंकि UIView जब नियंत्रक बनाया गया है तब भी स्पर्श करने योग्य नहीं है क्योंकि मेरे पास UITableView शेष स्क्रीन उपलब्ध करा रहा है।जब मैं एक UITextView

मुझे यह जानने के लिए उत्सुक था कि मैं UITableView पर क्लिक करके कीबोर्ड उर्फ ​​firstResponder से इस्तीफा दे दूंगा? UITableView पर टच इवेंट की निगरानी करने का कोई तरीका है भले ही यह एक क्लिक करने योग्य सेल का चयन न करें।

असल में, मुझे पता है कि सेल ईवेंट को फायर करने पर कीबोर्ड को इस्तीफा कैसे दे सकता है, लेकिन अगर मैं UITableView के एक गैर-क्लिक करने योग्य भाग पर क्लिक करता हूं तो भी मुझे कीबोर्ड जाने के लिए पसंद आएगा।

उत्तर

6

2 विकल्प:

  • अपने ViewController में, तालिका के स्क्रॉल कॉलबैक का जवाब और प्रत्युत्तर
-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    [self.view endEditing:YES]; 
} 
  • तुम हमेशा एक UITapGestureRecognizer जोड़ सकते हैं इस्तीफा देने टेबल/देखने के लिए और टी से उत्तरदाता इस्तीफा देने के लिए यहां

व्यक्तिगत रूप से मैं आमतौर पर टेबल स्क्रॉल पर करता हूं, क्योंकि मुझे कीबोर्ड को खारिज करने के लिए एक टैप पसंद नहीं है।

+0

धन्यवाद यूआईटीएपीजेस्टर रिकॉग्नाइज़र ने वही किया जो मुझे करने की ज़रूरत थी। मैं समय की सराहना करता हूं। मुझे यकीन है कि स्क्रॉल भी काम करता है, मुझे बस इस मामले में टैप की आवश्यकता है लेकिन बाद में मेरे इन्वेंट्री में स्क्रॉल रखेगी। – Rob

3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    UITapGestureRecognizer *doubleTap = 
      [[UITapGestureRecognizer alloc] 
      initWithTarget:self 
      action:@selector(tapDetected:)]; 
      doubleTap.numberOfTapsRequired = 1; 
      [self.tableView addGestureRecognizer:doubleTap]; 
      [doubleTap release]; 

    } 

- (IBAction)tapDetected:(UIGestureRecognizer *)sender 
{ 
    CGPoint p = [sender locationInView:self.tableView]; 

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p]; 

    if(indexPath == nil) 
    { 
    NSLog(@"empty"); 
    } 
    else 
    { 
    [textField resignFirstResponder]; 
    } 
} 

मुझे लगता है कि यह मदद मिलेगी ... यह कोशिश ..

+1

मैंने स्क्रॉल का उपयोग करके समाप्त कर दिया क्योंकि जब मैं टेबलव्यू पर एक टेपेस्टर डालता हूं तो यह कोशिकाओं को नलिकाओं को पढ़ने के लिए नहीं बनाता है और इस प्रकार कोशिकाएं कोशिकाओं को सबमिट नहीं करतीं क्योंकि टैप इशारा घटना को खा रहा था। धन्यवाद हालांकि मुझे शायद सड़क के नीचे एक और स्थिति में इस कोड की आवश्यकता होगी। – Rob

0
@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed. 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    self.activeTextField = textField; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // if (indexPath equal to something then) 
    [self.activeTextField resignFirstResponder]; 
} 
3

जोड़ना एक टैप जेस्चर पहचानकर्ता एक दिलचस्प समाधान है, लेकिन वहाँ एक विकल्प है और आप कुछ भी कोड करने के लिए जरूरत नहीं है!

आप इंटरफ़ेस बिल्डर में संपत्ति कीबोर्डडिस्मिसोड पर अपने तालिका दृश्य के लिए "ड्रैग पर डिसमिस" करने के लिए सेट कर सकते हैं। यह UIScrollView से विरासत में प्राप्त एक संपत्ति है और जब भी आप अपना टेबल व्यू स्क्रॉल करते हैं, तो कीबोर्ड को खारिज कर दिया जाता है।