2010-05-29 28 views
9

किसी कारण से, जब मैं एक टेबलसेल के कंटेंटव्यू के सबव्यूव के रूप में यूआईटीएक्स्टफील्ड जोड़ता हूं, तो clearbutton फ़ील्ड में टाइप किए गए टेक्स्ट से संरेखित नहीं होता है, और इसके नीचे थोड़ा दिखाई देता है। क्या ऐसा कोई तरीका है जिससे मैं इसे रोकने से रोकने के लिए clearbutton के पाठ को स्थानांतरित कर सकता हूं? किसी भी मदद के लिए धन्यवाद,मैं UITextField में स्पष्ट बटन कैसे स्थानांतरित कर सकता हूं?

उत्तर

3

मैंने इसे नहीं देखा है, और एक स्क्रीन शॉट सहायक होगा। लेकिन, त्वरित उत्तर यह है कि आप UITextField के सबव्यूज़ सरणी का निरीक्षण कर सकते हैं, उस सबव्यूव को ढूंढें जिसमें स्पष्ट बटन है, और इसके फ्रेम को व्यवस्थित करें।

संपादित करें: ऐसा लगता है कि मुझे इस उत्तर के लिए डाउनवॉट किया गया है (2010 में लिखा गया)। यह "आधिकारिक तौर पर" अनुमोदित विधि नहीं है क्योंकि आप निजी वस्तुओं में हेरफेर कर रहे हैं, लेकिन यह ऐप्पल द्वारा पता लगाने योग्य नहीं है। मुख्य जोखिम यह है कि दृश्य पदानुक्रम कुछ बिंदु पर बदला जा सकता है।

- (CGRect)clearButtonRectForBounds:(CGRect)bounds 
{ 
    return CGRectMake(bounds.origin.x - 10, bounds.origin.y, bounds.size.width, bounds.size.height); 
} 

वापसी CGRect कि अपनी आवश्यकताओं से मेल खाता है:

+0

टिप के लिए धन्यवाद, मैं अभी सड़क पर हूं लेकिन एक बार जब मैं स्टॉप पर जाता हूं, तो मैं इसे आज़माउंगा और आपको अपडेट करूँगा। – Jake

+0

हाँ मैं सिर्फ सबव्यूव को स्थानांतरित करने जा रहा हूं। – Jake

+0

UITextField.m का कोड सुलभ नहीं है। UITextField को – Luda

1

उपवर्ग UITextField और इस विधि को ओवरराइड।

+2

यह बटन को दाएं किनारे पर नहीं रखेगा। यह होगा: CGRectMake लौटें (bounds.size.width/2-20, bounds.origin.y-3, bounds.size.width, bounds.size.height); – Luda

6

मैंने UITextField उपखंड किया था और फ़ंक्शन को ओवरराइड किया था।

#import <UIKit/UIKit.h> 

@interface TVUITextFieldWithClearButton : UITextField 

@end 

मीटर

#import "TVUITextFieldWithClearButton.h" 

@implementation TVUITextFieldWithClearButton 

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

- (void)awakeFromNib 
{ 
    self.clearButtonMode = UITextFieldViewModeWhileEditing; 
} 


- (CGRect)clearButtonRectForBounds:(CGRect)bounds 
{ 
    return CGRectMake(bounds.size.width/2-20 , bounds.origin.y-3, bounds.size.width, bounds.size.height); 
} 

@end 
+1

ऐसा प्रतीत होता है कि आपने अन्य उत्तरों को कम कर दिया है। अछा नहीं लगता। –

+7

मैंने जवाबों में से एक को वोट दिया। मैंने ऐसा इसलिए किया क्योंकि जवाब, मेरी राय में, गलत है। मैंने टिप्पणी की है कि मुझे ऐसा क्यों लगता है, और मुझे इसके बारे में आपसे बात करना जारी रहेगा (प्रासंगिक धागे पर)। अधिकतर आयातक यह समझना है कि चीजें कैसे सही होती हैं और आप कितनी अच्छी नहीं हैं। – Luda

26

रूप @Luda द्वारा सही तरीके कहा UITextField उपवर्ग और - (CGRect)clearButtonRectForBounds:(CGRect)bounds ओवरराइड करने के लिए है। हालांकि विधि में पारित सीमाएं स्वयं के दृश्य हैं, न कि बटन। इसलिए आपको ओएस प्रदान किए गए आकार (छवि के विकृति से बचने के लिए) प्राप्त करने के लिए super पर कॉल करना चाहिए और फिर अपनी आवश्यकताओं के अनुसार मूल समायोजित करना चाहिए।

उदा।

- (CGRect)clearButtonRectForBounds:(CGRect)bounds { 
    CGRect originalRect = [super clearButtonRectForBounds:bounds]; 
    return CGRectOffset(originalRect, -10, 0); //shift the button 10 points to the left 
} 

एप्पल docs राज्य:

चर्चा आप इस पद्धति सीधे नहीं बुलाना चाहिए। यदि आप एक अलग स्थान पर स्पष्ट बटन रखना चाहते हैं, तो आप इस विधि को ओवरराइड कर सकते हैं और नया आयताकार वापस कर सकते हैं। आपकी विधि को सुपर कार्यान्वयन और केवल लौटा आयताकार उत्पत्ति को संशोधित करना चाहिए। स्पष्ट बटन के आकार को बदलने से बटन छवि के अनावश्यक विरूपण हो सकता है।

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