2013-10-29 31 views
14

iOS 7'de UISearchBar, yer tutucu metni ortalanır ve bunu devre dışı bırakmak ve daha önce olduğu gibi sola yapışmasını sağlamak istiyorum.iOS 7'de UISearchBar, yer tutucu metnini hizaladı mı?

enter image description here

Orada özel bir yöntem setCenterPlaceholder fark dosyaları üzerinde, ve bir BOOL ile bu çağıran gezisi yapacak. https://gist.github.com/nscoding/7220368

Başlık dosyası

@interface NSCodingSearchBar : UISearchBar 

// Default by the system is YES. 
// https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UISearchBar.h 
@property (nonatomic, assign, setter = setHasCentredPlaceholder:) BOOL hasCentredPlaceholder; 

@end 

Uygulama dosyasını

#import "NSCodingSearchBar.h" 


// ------------------------------------------------------------------------------------------ 


@implementation NSCodingSearchBar 


// ------------------------------------------------------------------------------------------ 
#pragma mark - Initializers 
// ------------------------------------------------------------------------------------------ 
- (instancetype)initWithFrame:(CGRect)frame 
{ 
    if ((self = [super initWithFrame:frame])) 
    { 
     self.hasCentredPlaceholder = YES; 
    } 

    return self; 
} 


// ------------------------------------------------------------------------------------------ 
#pragma mark - Methods 
// ------------------------------------------------------------------------------------------ 
- (void)setHasCentredPlaceholder:(BOOL)hasCentredPlaceholder 
{ 
    _hasCentredPlaceholder = hasCentredPlaceholder; 

    SEL centerSelector = NSSelectorFromString([NSString stringWithFormat:@"%@%@", @"setCenter", @"Placeholder:"]); 
    if ([self respondsToSelector:centerSelector]) 
    { 
     NSMethodSignature *signature = [[UISearchBar class] instanceMethodSignatureForSelector:centerSelector]; 
     NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 
     [invocation setTarget:self]; 
     [invocation setSelector:centerSelector]; 
     [invocation setArgument:&_hasCentredPlaceholder atIndex:2]; 
     [invocation invoke]; 
    } 

} 


@end 

aynı şeyi yapar başka değil, "Hacky yol" olup olmadığını merak ediyorum.

+0

söz konusu kod içeren olması tercih edilebilirse, yerine sadece ona bağlanıyor. –

+0

Bunu denediniz mi? http://stackoverflow.com/a/19555305/2155985 –

+0

Bunun iyi bir fikir olduğunu sanmıyorum. Standartları mümkün olduğunca sağlam tutmaya çalışmalısın. – anders

cevap

0

UISearchBar ile denemedim, ancak bu bir UITextField ile çalışır. Bunu subclassed ve leftViewRectForBounds:, textRectForBounds: ve editingRectForBounds: overrode, burada kod şudur:

- (CGRect)textRectForBounds:(CGRect)bounds { 
    CGRect inset = CGRectMake(bounds.origin.x + kLeftTextPadding, 
         bounds.origin.y, 
         bounds.size.width - kLeftTextPadding, 
         bounds.size.height); 
    return inset; 
} 

yardımcı olur Umut.

3

iOS7'de yer tutucunun sola hizalanmasını almak için yer tutucu dizenizin sonuna beyaz boşluklar ekleyebilirsiniz. Örneğin: Her arama çubuğu ve her dil için ayrı ayrı yapılması gerektiğini unutmayın.

biri her dil için metin sonra gerekli alanların otomatik hesaplama yazmayı deneyebilirsiniz ama Searchbar en textField çerçevesinin boyutunu okumak mümkün görünüyor

<UISearchBarTextField: 0x1349c160; frame = (0 0; 0 0); 
+0

Neyin var? Gerçekten işe yarıyor ve belki de aptalca görünüyor. – malex

+0

Bunu kendim kullandım. Şimdi, bu beyaz alanları nasıl ekleyebilirim? –

+0

Yukarıdaki gibi sıradan boşlukları yazabilirsin h ve daha önce ". Ya da farklı beyaz boşlukların utf-8 kodlarını yazabilirsin. – malex