2014-06-30 9 views
8

कैलेंडर में, जब आप एक नया ईवेंट बनाते हैं, तो यदि आप वॉयसओवर सक्षम के साथ ऑल डे सेल पर टैप करते हैं, तो सिरी कहते हैं, "ऑल डे स्विच बटन चालू/बंद, सेटिंग बदलने के लिए दो बार टैप करें"। और वास्तव में डबल टैपिंग स्विच टॉगल करेगा। साथ ही, केवल टॉगल स्विच पर टैप करना संभव नहीं है - स्विच को टॉगल करने के लिए आपको स्वयं सेल से बातचीत करना होगा, स्विच स्वयं एक सुलभ तत्व नहीं है।वॉयसओवर इंटरैक्शन

मेरे ऐप में मेरे पास एक लेबल और स्विच के साथ एक ही सेटअप है। लेकिन जब मैं वॉयसओवर सक्षम के साथ सेल को टैप करता हूं तो यह केवल लेबल को पढ़ता है ताकि अंधे उपयोगकर्ता को पता न हो कि उस सेल में टॉगल स्विच है। अगर वे स्विच को स्वयं टैप करते हैं तो वे इसके साथ बातचीत कर सकते हैं, इसलिए यह कैलेंडर ऐप में सेटअप के विपरीत है।

ऐप्पल को उसी व्यवहार को कैसे प्राप्त किया जा सकता है? मुझे सेल में स्विच को गठबंधन करने के लिए कुछ तरीका चाहिए ताकि वॉयसओवर सेल को हाइलाइट करने पर दोनों को पढ़ सके, फिर जब वे दो बार टैप करते हैं तो स्विच को टॉगल करना चाहिए, और मुझे यकीन नहीं है कि यह सेटअप कैसे पूरा किया जा सकता है। धन्यवाद!

उत्तर

7

वांछित व्यवहार को लागू करने के लिए, UISwitch को सेल के contentView में रखने के बजाय, इसे accessoryView प्रोग्रामेटिक रूप से जोड़ें। फिर वॉइसओवर का उपयोग करते समय सेल और स्विच बिल्कुल वैसे ही व्यवहार करेगा जैसा ठीक है, कैलेंडर में करता है।

+1

आपने उत्तर दिया मेरी मदद की। दुर्भाग्य से यह @borisy आप UITableViewCell उपवर्ग और accessibilityActivate लागू कर सकते हैं() एक UISegmentedControl के साथ एक ही प्रभाव को प्राप्त करने के लिए केवल 'UISwitch' और नहीं' UISegmentedControl' –

+0

साथ काम करता है। यह UISwitch के मुकाबले थोड़ा और काम लेता है, लेकिन यह किया जा सकता है। – Daniel

1

आप

cell.accessibilityLabel = @"Double tap to toggle setting"; 

का उपयोग कर आप जब-योग्यता इस जवाब के अनुसार चल रहा है के लिए कस्टम इशारों सेट कर सकते हैं सेल पर एक कस्टम पहुँच वर्णन सेट करने के लिए सक्षम होना चाहिए:

https://stackoverflow.com/a/12337128/567511

लेकिन यहां आपको कस्टम इशारे की आवश्यकता नहीं होगी, इसके बजाय आपके didSelectRowAtIndexPath केवल UIAccessibilityIsVoiceOverRunning सत्य होने पर स्विच फ्लिप करेगा।

+1

बस ऐसा करना बुरा होगा, क्योंकि डबल टैपिंग वास्तव में सेटिंग को टॉगल नहीं करेगा। और पाठ जो बताता है कि सेटिंग बदलने के लिए आप दो बार टैप कर सकते हैं, जब उपयोगकर्ता स्विच पर टैप करता है। मुझे सेल के साथ स्विच को गठबंधन करने के लिए कुछ तरीका चाहिए ताकि सेल को ट्रिगर करने से पंक्ति का चयन करने के बजाय स्विच टॉगल हो जाए। – Joey

+0

क्षमा करें, मुझे गलत समझा जाता है कि आपके पास अभी तक उस हिस्से को काम नहीं किया गया है। कृपया मेरा संपादन देखें। – nagem

+0

इसके लिए धन्यवाद। मैं ऐसा कर सकता था लेकिन सेल को हाइलाइट करने से उपयोगकर्ता को स्विच और उसके राज्य (चालू या बंद) के बारे में बताना चाहिए। इसे गतिशील होने की आवश्यकता है इसलिए मैं एक्सेसिबिलिटी लेबल के लिए एक स्थिर एनएसएसटींग को परिभाषित नहीं कर सकता। क्या सेल को "गठबंधन" करने और एक में स्विच करने का कोई तरीका नहीं है, इसलिए यह कैलेंडर में करता है जैसा कि दूसरे के बाद होता है? मुझे आश्चर्य है कि उन्होंने इसे कैसे कार्यान्वित किया।मुझे आश्चर्य है कि UISwitch को accessoryView के रूप में जोड़ना समाधान होगा? मैंने इसे अभी खींच लिया और इसे कस्टम सेल में रखा। – Joey

1

मैं the answer of Joey पर विस्तृत करना चाहता हूं, और यह स्पष्ट करता हूं कि कोड में इस प्रश्न का समाधान कैसे प्राप्त किया जा सकता है।

तालिका दृश्य में: cellForRowAtIndexPath:, एक कस्टम UISwitch दृश्य बनाएं और इसे सेल के accessoryView में संलग्न करें। यह कुछ जैसा दिख सकता है।

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; 
[switchView setOn:NO]; 
[switchView addTarget:self action:@selector(selector:) forControlEvents:UIControlEventValueChanged]; 
cell.accessoryView = switchView; 

return cell; 

सेल अब किसी मूल आईओएस स्विच की तरह व्यवहार करेगा जैसे कि सेटिंग्स या कैलेंडर। वॉयसओवर सक्षम के साथ सेल पर डबल टैपिंग, अब यूआईएसविच (चालू/बंद) टॉगल करेगा, और वॉयसओवर स्वचालित रूप से स्विच की स्थिति के बारे में उपयोगकर्ता को सूचित करेगा, साथ ही पहुंच पहुंच संकेत के साथ।

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