2008-12-17 8 views
24

अपने आवेदन में मैं एक UITextField एक UITableViewCell अंदर है। यदि मैं टेक्स्ट फ़ील्ड के अंदर क्लिक करता हूं और कुछ टेक्स्ट जोड़ता हूं तो मुझे लगता है कि अगर सम्मिलन बिंदु को स्थानांतरित करने का प्रयास किया जाता है तो यह पहली बार काम करता है लेकिन बाद के प्रयासों में विफल रहता है। मैं चयन को स्थानांतरित करने में पूरी तरह असमर्थ हूं; कोई "आवर्धक ग्लास" प्रकट होता है।एक UITableViewCell अंदर एक UITextField का संपादन विफल रहता है

और भी उत्सुक, यह "सेटिंग" तब तक स्थायी प्रतीत होता है जब तक कि मैं एप्लिकेशन को पुनरारंभ नहीं करता। और यह उस स्क्रीन पर सभी UITextFields को प्रभावित करता है न कि केवल मूल रूप से जिसे मैंने संपादित करने का प्रयास किया था।

आप इसे अपने आप को देखने के लिए, "UICatalog" नमूना है कि iPhone SDK के साथ आता है की कोशिश करें। "टेक्स्ट फ़ील्ड" पर क्लिक करें और फिर "संपादित करें" पर क्लिक करें और टेक्स्ट बॉक्स के साथ खेलें।

मैंने इस पर बहुत खुदाई की है लेकिन Google के लिए यह बहुत कठिन है! मैंने पाया है कि सबसे अच्छे संदर्भ Apple's support board और MacRumors formum पर हैं (दोनों एक समाधान का संदर्भ देते हैं जो स्पष्ट रूप से आईफोन 2.0 पर काम करने के लिए उपयोग किया जाता है लेकिन समकालीन संस्करणों के साथ काम नहीं करता - मैंने कोशिश की)।

मेरे लग रहा है कि यह है कि इस ओएस में एक बग है, लेकिन मैंने सोचा कि मैं एक दूसरी राय के लिए बहुत भीड़ के लिए बाहर इस फेंक चाहते हैं और अगर कोई कामकाज से जुड़े हैं को देखने के लिए। कोई विचार?

benzado के सुझाव के बाद, मैं 2.0, 2.1 और 2.2 SDKs का उपयोग कर अपने आवेदन के निर्माण की कोशिश की। मुझे सभी संस्करणों में एक ही व्यवहार मिला। (वास्तव में, संबंधित कुछ नहीं बल्कि एक ही 2.2 में तोड़ दिया, लेकिन वह शायद एक और सवाल है!)

उत्तर

12

मैंने इस पर बहुत समय बिताया लेकिन मुझे अंत में लगता है कि मैंने इसे खींचा है।

चाल यह है कि तालिका को संपादन योग्य होने की आवश्यकता है (यानी, इसकी editing संपत्ति को YES पर सेट करने की आवश्यकता है)। अच्छी खबर यह है कि अब आप सम्मिलन बिंदु को स्थानांतरित करने में सक्षम हैं। कभी-कभी आवर्धक ग्लास प्रकट नहीं होता है या उसका पालन नहीं करता है लेकिन आपका इशारा हमेशा काम करता प्रतीत होता है।

क्या यह अभी भी एक बग के रूप में योग्य है? शायद। कम से कम ऐप्पल के एसडीके दस्तावेज़ों को अद्यतन किया जाना चाहिए। मैंने इसे कवर करने के लिए ऐप्पल के साथ एक बग रिपोर्ट उठाई है (rdar: // 6462725)।

+0

वाह, मैंने अभी अपने ऐप में एक ही समस्या देखी है। मैंने तुम्हारी चाल की कोशिश की और अब यह ठीक काम करता है, धन्यवाद! इसके अलावा, मुझे टेबल दृश्य बनाना था: canEditRowAtIndexPath: और tableView: canMoveRowAtIndexPath: वापस नहीं, ताकि तालिका संपादन मोड में ऐसा न हो! – squelart

+0

इस समाधान के लिए आप दोनों को धन्यवाद –

+0

UITableView में संपादन योग्य संपत्ति नहीं है, केवल UITextField करता है ... क्या आप UITableView पर/संपादन/संपत्ति के बारे में बात कर रहे हैं? या यह UITableViewCell पर है? –

0

यह एक ओएस बग की तरह ध्वनि करता है। मैं कुछ भी बदलता है या नहीं, यह देखने के लिए 2.0, 2.1, और 2.2 एसडीके के खिलाफ UICatalog नमूना चलाकर इसे पुन: उत्पन्न करने का प्रयास करूंगा। (तालिका सेल टेक्स्ट संरेखण से संबंधित एक बग है जो तब होता है जब आप 2.2 के लिए बनाते हैं, लेकिन यदि आप 2.1 के लिए नहीं बनाते हैं, तो डिवाइस पर ओएस का कौन सा संस्करण है, इस पर ध्यान दिए बिना।)

यदि यह कोई फर्क पड़ता है , https://bugreport.apple.com/

+0

सुझाव के लिए धन्यवाद जरूरत नहीं है। मैं निश्चित रूप से एसडीके के विभिन्न संस्करणों के साथ निर्माण करने की कोशिश करूंगा। मैंने माना था कि यह ओएस का संस्करण था कि कोड चल रहा था, लेकिन निश्चित रूप से जब आप मानते हैं ... –

0

मैं अपने आवेदन के साथ इस की कोशिश की और यह अपेक्षा के अनुरूप काम करने लगता है। मुझे हर बार एक आवर्धक ग्लास मिलता है। मैं 2.1 एसडीके का उपयोग कर रहा हूँ।

+0

दिलचस्प। तो UITableView, UITableViewCell और UITextField का आपका उपयोग UICatalog नमूना में से भिन्न कैसे है? –

2

इस पोस्ट के लिए धन्यवाद, मैं अपने ऐप में ठीक से काम करने के लिए इसे सफलतापूर्वक प्राप्त करने में सक्षम हूं।

कुछ जोड़ने के लिए, तथापि:

आप संपादन योग्य होने के लिए अपनी मेज सेट करते हैं, आप की संभावना (, इंडेंट, कोई प्रकटीकरण संकेतक, आदि संपादन विगेट्स) अलग व्यवहार आपकी अपेक्षा से मिल जाएगा।यह मैं हैरान कर दिया, लेकिन यहाँ कैसे सबसे अच्छा यह से निपटने के लिए है:

अपने UITableView प्रतिनिधि में, लागू:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return NO; 
} 

फिर, अपने UITableViewCell के क्रियान्वयन में, अपने UITableView संपादन योग्य होने के लिए केवल जब आप वास्तव में संपादित कर रहे हैं सेट :

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    ((UITableView *)[self superview]).editing = YES; 
... 
} 

और अक्षम संपादन जब संपादन किया जाता है:

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
... 
    ((UITableView *)[self superview]).editing = YES; 
} 

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

धन्यवाद!

ब्रायन एम Criscuolo मार्क/अंतरिक्ष इंक

2

ब्रायन एम Criscuolo से जवाब है, सबसे करीब है लेकिन इसकी अभी भी बहुत सही नहीं - SDK2.2.1 की मेरी उपयोग में मुझे लगता है मैं क्या करना है कि निम्नलिखित:

अपने UITableViewDelegate करने के लिए

(जो अक्सर अपने UITableViewController है) निम्न में से दोनों जोड़ें:

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return NO; 
} 

और:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewCellEditingStyleNone; 
} 

और:

- (void)viewDidLoad { 
[super viewDidLoad]; 

    // do any other customisation here 
self.uiTableView.editing = true; 
} 

आप शीर्ष दो प्रतिनिधि तरीकों डाल नहीं है, तो ऊपर दिए हटाएं माउस का कारण होगा प्रत्येक पंक्ति, और प्रत्येक पंक्ति के खरोज के बगल में।

आपको टेक्स्टफील्ड प्रतिनिधियों के साथ कुछ भी करने की आवश्यकता नहीं है क्योंकि ब्रायन ने इंगित किया है (जब तक कि आपके पास एकाधिक पंक्तियां न हों और आप एक didSelectRowAtIndexPath: ईवेंट का जवाब देना चाहते हैं - जो आपको संपादन मोड में नहीं लगता है - तो आप जैसा कि वह सुझाव देता है) भी करना होगा।

वैसे - इस SDK3.0 में ठीक किया गया लगता है (हालांकि मुझे लगता है कि इस विषय बदलने के लिए)

0

वास्तव में क्या सबसे अच्छा काम करता तालिका "संपादन" संपत्ति को सही पर "viewDidLoad" में और जोड़ने स्थापित करने के लिए हो रहा है इन तालिका प्रतिनिधि

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return NO; 
} 

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return NO; 
} 

को आप पाठ क्षेत्र प्रतिनिधि में कुछ भी करने

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