代码之家  ›  专栏  ›  技术社区  ›  zeeple

UITextFieldDelegate适用于iOS 8,但不适用于iOS 7

  •  1
  • zeeple  · 技术社区  · 9 年前

    我有一个UIViewController,其中包含UITextField,并且符合UITextFieldDelegate协议。当我第一次构建应用程序时,iOS 7是最新的iOS,当我选择文本字段时,键盘就会出现,正如预期的那样。

    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
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   zeeple    9 年前

    一条红鲱鱼,如果有的话。事实证明,这是一个iOS模拟器检测到硬件键盘的情况,因此没有举起模拟的iPhone键盘。我之所以认为代表在iOS 8而不是iOS 7上工作,是因为我的设备运行iOS 8,所以我在测试iOS版本时会在设备上进行测试,而我在需要测试iOS 7时使用了模拟器。当我在模拟器上测试iOS8时,我发现了我的错误假设,我意识到不同的不是iOS版本,而是设备和模拟器。我通过进入模拟器,然后在硬件菜单中,然后在键盘中,然后取消选中“连接硬件键盘”选项来纠正问题。

    这使我沮丧不已。我希望有人从我的帖子中受益!