2013-02-06 64 views
7

मेरे पास UISearchBar है जिसके लिए मैंने UiControlStateNormal के लिए कस्टम UISearchBarIconClear सेट किया है।UISontBarIconClear को UIControlStateHighlighted के लिए अनुकूलित करना

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

इस हिस्से के रूप में यह होना चाहिए लेकिन दुर्भाग्य से जब स्पष्ट बटन को टैप करके, यह मूल डिफ़ॉल्ट ग्रे एक के लिए, छवि मैं सेट से बदल जाता है काम करता है।

मैंने UIControlStateHighlighted के लिए छवि सेट करने का प्रयास किया है, लेकिन स्पष्ट रूप से यह काम नहीं करता है।

documentation वास्तव में कहा गया है

मान्य राज्यों UIControlStateNormal और UIControlStateDisabled हैं।

डिफ़ॉल्ट स्थिति के लिए कस्टम बटन सेट करने का क्या मतलब है यदि आप इसे हाइलाइट किए गए राज्य के लिए सेट नहीं कर सकते हैं? क्या मैं कुछ भूल रहा हूँ? किसी भी विचार या कामकाज की सराहना की, धन्यवाद!

+0

, इस के लिए छवि सेट पूरी तरह से काम करता है ... यहां तक ​​कि हाइलाइट किया गया राज्य ... – jimpic

उत्तर

0

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

for(UIView *subView in searchBar.subviews) { 
    if([subView isKindOfClass: [UITextField class]]){ 
     UITextField *searchField = (UITextField *)subView; 
     CGFloat myWidth = 26.0f; 
     CGFloat myHeight = 30.0f; 
     UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)]; 
     [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal]; 
     [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted]; 

     [myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside]; 

     searchField.rightView = myButton; 
     searchField.rightViewMode = UITextFieldViewModeAlways; 
     searchField.clearButtonMode = UITextFieldViewModeNever; 
    } 
} 

और फिर ..

इस दृष्टिकोण के साथ
- (void)clearsearchbar { 
    for(UIView *subView in searchBar.subviews) { 
     if([subView isKindOfClass: [UITextField class]]){ 
      UITextField *searchField = (UITextField *)subView; 
      searchField.text = nil; 
     } 
    } 
} 

तीन समस्याओं ..

  1. हम चारों ओर searchbar की subviews अंदर खुदाई कर रहे हैं के बाद से इसके साथ कुछ दिन को तोड़ सकते थे एक ओएस अपडेट।

  2. यह ठीक UISearchBarIconClear की तरह व्यवहार नहीं करता है, कि में स्पष्ट आइकन हमेशा दिखाई जाएगी .. आप संभावित रूप से इस दृष्टिकोण का उपयोग अन्य UITextFieldViewModes के साथ परीक्षण की कोशिश कर सकते, मैंने नहीं किया जिसका मुख्य कारण, क्या मैं से कोई भी पता से दूसरों को किसी कारण या दूसरे के लिए यहां आदर्श होगा।

  3. शायद यह सिर्फ मुझे है, लेकिन मुझे सच में नहीं लगता कि कुछ हल करने की कोशिश करते समय दो समस्याएं उत्पन्न होती हैं, एक समाधान है। :-)

अगर किसी को भी इस समस्या से निपटने का बेहतर तरीका है, तो मुझे यह भी सुनना अच्छा लगेगा।

+0

समाधान के लिए धन्यवाद। मैंने अंतर्निहित टेक्स्टफील्ड और सर्च बार स्टाइल में अन्य संशोधन करने के लिए कुछ समान हैकी सामान किए हैं। यह समाधान ऐसा लगता है कि यह सामान्य रूप से ठीक काम करेगा, लेकिन मैं इसे अधिकतर पास कर दूंगा क्योंकि यह मेरे लिए बदलने के लिए एक महत्वपूर्ण बात नहीं है (जैसा आपने कहा था, 2 और बनाकर समस्या को हल करना)। उस ने कहा, जब आप फ़ील्डफील्ड टेक्स्ट फ़ील्ड में कुछ भी है या नहीं, तो बटन को छिपाने/दिखाकर आप नियमित रूप से स्पष्ट बटन की तरह व्यवहार कर सकते हैं। – Dima

+0

@ बेन जैकसन: वाह! एक टिप्पणी में उस चतुर सवाल का धन्यवाद। आदर्श रूप में, मैं कहूंगा, मैं एक समाधान पोस्ट करूंगा कि मैं खुद का उपयोग नहीं करूंगा, इसी कारण से, आप पूछे गए प्रश्न पूछेंगे। उस प्रश्न का उत्तर क्या होगा? –

2

उपस्थिति प्रॉक्सी का उपयोग करने के बारे में कैसे?

[[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted]; 
2

मुझे वही समस्या थी जैसा आपने दबाए जाने पर डिफ़ॉल्ट आइकन पर रीसेट करने वाले स्पष्ट आइकन के साथ वर्णित किया था।

ऐसा लगता है कि सामान्य और हाइलाइट किए गए राज्य दोनों के लिए एक ही UIImage का उपयोग करने की कोशिश कर रहा है, हाइलाइट किए गए राज्य के लिए एक अलग छवि पर स्विच करने से समस्या ठीक हो गई है।

9

मैं एक ही समस्या थी, और बयानों के आदेश का समायोजन इसे हल:

तो बजाय UIControlStateNormal पहले कर तो UIControlStateHighlighted, हाइलाइट राज्य पहले

[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; 
[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 
मेरे लिए
+1

यह पागलपन क्या है? –

+0

यह काम है! बढ़िया! धन्यवाद! – LLIAJLbHOu

+1

यह हमेशा काम करने के अजीब तरीके है। इसे सबव्यूज़ के साथ गड़बड़ करने के बजाय वास्तविक उत्तर के रूप में स्वीकार किया जाना चाहिए। जैसा कि सुझाव दिया गया है कि यह बदलने की संभावना है और बिल्कुल भी नहीं ... इस विचार के लिए धन्यवाद। – StuartM