UITextFields
için özel girdimle ilgili sorun yaşıyorum. Kullanıcının bir UITextField
numaralı telefona girmesi gereken metne bağlı olarak, inputView sadece gerekli harfleri görüntüler. Bu kısa metinler için, sadece bir satır harf içeren bir giriş Görünümü yeterlidir, uzun metinler 2 veya 3 satır gerektirebilir, bu yüzden inputView'un yüksekliği değişkendir.Özel giriş iOS 8'de dinamik yüksekliğe sahip görünüm
Daha iyi performans beklediğimden beri, her textField tarafından kullanılan yalnızca bir inputView örneği var. Bu şekilde, yaratımın yalnızca bir kez gerçekleşmesi ve bazen girişe ihtiyaç duyulan doğrudan erişimi kolaylaştırması gerekir. InputView - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
'da kurulur, gerekli yüksekliğini ayarlar ve gösterilecektir.
Bu, mükemmel çalışıyor, ancak iOS8'de çalışmıyor. Orada inputView içeren bazı sistem görünümü değiştiklerinde inputView sınırına uyacak şekilde çerçevesini güncellemez (ilk kez çalışır).
Bu, textField başına benim inputView bir örneğini kullanarak sabit olabilir biliyorum. Ancak, çerçeveyi ayarlamanın veya değiştirmeyi içeren görünüme bildirmenin önerilen/daha iyi bir yolu olup olmadığını soruyorum. Belki de yayınlanana kadar giderilebilecek bir iOS8 hatası mı?
CustomInputView
@implementation CustomInputView
+ (CustomInputView*)sharedInputView{
static CustomInputView *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[CustomInputView alloc] init];
});
return sharedInstance;
}
- (id)init
{
self = [super init];
if (self) {
self.backgroundColor = [UIColor greenColor];
}
return self;
}
- (void)setupForTextField:(UITextField*)textField{
CGFloat height;
if(textField.tag == 1){
height = 100;
}else height = 50;
self.frame = CGRectMake(0, 0, 320, height);
}
@end
TestViewController kodu
- (void)viewDidLoad
{
[super viewDidLoad];
UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(15, 50, 290, 30)];
tf.text = @"bigKeyboard";
tf.inputView = [CustomInputView sharedInputView];
tf.layer.borderWidth = 1;
tf.layer.borderColor = [UIColor lightGrayColor].CGColor;
tf.delegate = self;
tf.tag = 1;
[self.view addSubview:tf];
tf = [[UITextField alloc] initWithFrame:CGRectMake(15, 100, 290, 30)];
tf.text = @"smallKeyboard";
tf.inputView = [CustomInputView sharedInputView];
tf.layer.borderWidth = 1;
tf.layer.borderColor = [UIColor lightGrayColor].CGColor;
tf.delegate = self;
tf.tag = 2;
[self.view addSubview:tf];
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
[button setTitle:@"dismissKeyboard" forState:UIControlStateNormal];
[button addTarget:self action:@selector(endEditing) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(15, 150, 290, 30);
[self.view addSubview:button];
}
- (void)endEditing{
[self.view endEditing:YES];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
[[CustomInputView sharedInputView] setupForTextField:textField];
return YES;
}
Girdiyi yeniden boyutlandırmak için herhangi bir çözüm buldunuz mu? IPad için sabit giriş yüksekliği ihtiyacım var. –
Sabit bir yüksekliğe ihtiyacınız varsa, çalışmalıdır - inputView, oluştururken belirttiğiniz yükseklikte kalır. Yüksekliği daha sonra değiştirmeniz gerekirse, hala bir çözümün farkında değilim. Benim durumum için tamam olan textView başına bir inputView yaratmanın geçici bir çözüm aldı ... – robert