2015-01-30 3 views
1

У меня есть UIViewController с UITextField в нем и соответствует протоколу UITextFieldDelegate. Когда я впервые построил приложение, iOS 7 была последней iOS, и когда я выбрал текстовое поле, клавиатура появлялась, как и ожидалось.UITextFieldDelegate работает на iOS 8, но не iOS 7

Наряду с iOS 8 и Xcode 6. Ничего не изменилось в коде, так как я впервые написал его, но теперь, что любопытно, когда я выбираю текстовое поле на устройстве iOS 8, появляется клавиатура, но на устройстве iOS 7 это не.

Зачем это было? Есть идеи?

Вот мой код:

#import "BBFeatVC.h" 

@interface BBFeatVC() 

@end 

@implementation BBFeatVC 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.featTextField.delegate = self; 

    // Set label 
    self.featLabel.numberOfLines = 0; 

    // enhance keypad 
    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    numberToolbar.barStyle = UIBarStyleBlackTranslucent; 
    numberToolbar.items = [NSArray arrayWithObjects: 
          [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], 
          [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
          [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], 
          nil]; 
    [numberToolbar sizeToFit]; 
    self.featTextField.inputAccessoryView = numberToolbar; 

} 

-(void)cancelNumberPad{ 
    [self.featTextField resignFirstResponder]; 
} 

-(void)doneWithNumberPad{ 

    NSString *numberFromTheKeyboard = self.featTextField.text; 
    NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
    [f setNumberStyle:NSNumberFormatterDecimalStyle]; 
    NSNumber *num = [f numberFromString:numberFromTheKeyboard]; 

    NSInteger newStat = [num integerValue]; 
    [[NSUserDefaults standardUserDefaults] setInteger:newStat forKey:self.featStat]; 
    [self.featTextField resignFirstResponder]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

ответ

0

красная сельдь, если когда-либо был один. Как оказалось, это был случай, когда iOS Simulator обнаружил аппаратную клавиатуру и, следовательно, не поднимал имитационную клавиатуру iPhone. Причина, по которой я думал, что делегат работает на iOS 8, а не iOS 7, состоит в том, что мое устройство работает под управлением iOS 8, и поэтому я тестировал бы на устройстве, когда тестировал эту версию iOS, и я использовал симулятор, когда мне нужно было протестировать iOS 7 Как только я протестировал iOS 8 на симуляторе, я обнаружил свое ошибочное предположение, и мне стало понятно, что разница не между версиями iOS, а между устройством и симулятором. Я исправил проблему, перейдя в симулятор, а затем в меню «Оборудование», затем «Клавиатура», затем снимите флажок «Подключить аппаратную клавиатуру».

Это разочаровывало меня до бесконечности. Я надеюсь, что кто-то выиграет от моей публикации!

Смежные вопросы