Как показать кнопку 'Done' на цифровой клавиатуре на iPhone OS 4? [дубликат]

У вас должен быть один источник истины . Поскольку таблице потребуется эта информация, ее следует сохранить в таблице и передать компоненту раскрывающегося меню.

Оформить заказ этот пример кода и коробки .

24
задан Community 23 May 2017 в 10:29
поделиться

5 ответов

Техника, описанная в блоге Лузиана Шеррера , работает в iOS 4.0.

Мой код для добавления кнопки на клавиатуру не удался, потому что он вызывался из метода делегата textFieldDidBeginEditing:, который (в 4.0) вызывается перед созданием подпредставлений окна клавиатуры. Я исправил проблему, вызвав мой код, когда наблюдается UIKeyboardWillShowNotification, что происходит достаточно поздно.

3
ответ дан Will Harris 28 November 2019 в 22:10
поделиться

Вы можете добавить inputAccessoryView с помощью кнопок «Применить» и «Отмена», а затем отклонить цифровую клавиатуру.

inputAccessoryView

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];

    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];

    numberTextField.inputAccessoryView = numberToolbar;
}

-(void)cancelNumberPad{
    [numberTextField resignFirstResponder];
    numberTextField.text = @"";
}

-(void)doneWithNumberPad{
    NSString *numberFromTheKeyboard = numberTextField.text;
    [numberTextField resignFirstResponder];
}
89
ответ дан Fattie 28 November 2019 в 22:10
поделиться

Я отправил это в Apple как ошибку. Интерфейсный конструктор позволяет разработчику указать тип клавиши возврата для типа клавиатуры цифровой клавиатуры. Ошибка № 8759674.

Apple продолжила, сказав, что эта проблема была ранее зарегистрирована как идентификатор ошибки # 5885964, и они закрыли 8759674.

2
ответ дан Alan Hancock 28 November 2019 в 22:10
поделиться

Я создал версию, чтобы включить горизонтальную версию numpad ..., включив технику, описанную в блоге Лузиана Шеррера, и добавив два дополнительных png (не включенных здесь), и логическое значение "isLandscape" в "didRotateFromInterfaceOrientation". "метод ..

    @interface AlarmController ()
    {
        CGRect doneButtnRectVert;
        CGRect doneButtnRectHorz;
        CGRect doneButtnRect;
        UIImage* DoneUpVert;
        UIImage* DoneDownVert;
        UIImage* DoneUpHorz;
        UIImage* DoneDownHorz;
        UIImage* DoneUp;
        UIImage* DoneDown;
        UIButton *oldDoneButton;
    }
    @end

    //---------------------------------------------------------------------------
    - (void)viewDidUnload
    {
    NSLog(@"viewDidUnload  AlarmController");
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                      name:UIKeyboardDidShowNotification object:nil];

        [super viewDidUnload];
    }

    //---------------------------------------------------------------------------
    - (void)addButtonToKeyboard
    {
    NSLog(@"addButtonToKeyboard  AlarmController");
        if (isLandscape)
        {
            doneButtnRect = doneButtnRectHorz;
            DoneUp = DoneUpHorz;
            DoneDown = DoneDownHorz;
        } else {
            doneButtnRect = doneButtnRectVert;
            DoneUp = DoneUpVert;
            DoneDown = DoneDownVert;
        }

        UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
        doneButton.frame = doneButtnRect;
        doneButton.adjustsImageWhenHighlighted = NO;
        [doneButton setImage:DoneUp forState:UIControlStateNormal];
        [doneButton setImage:DoneDown forState:UIControlStateHighlighted];

        [doneButton addTarget:self action:@selector(done:) forControlEvents:UIControlEventTouchUpInside];

        UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
        UIView* keyboard;
        for(int i=0; i<[tempWindow.subviews count]; i++)
        {
            keyboard = [tempWindow.subviews objectAtIndex:i];
            if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
            {
                if (oldDoneButton) [oldDoneButton removeFromSuperview];
                [keyboard addSubview:doneButton];
            }
        }
        oldDoneButton = doneButton;
    }

    //---------------------------------------------------------------------------
    - (void)keyboardDidShow:(NSNotification *)note
    {
    NSLog(@"keyboardDidShow  AlarmController");
        [self addButtonToKeyboard];
    }

    #pragma mark -
    #pragma mark meaty area...

//---------------------------------------------------------------------------
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"textFieldDidEndEditing AlarmController");
    oldDoneButton = nil;
}

    //---------------------------------------------------------------------------
    - (void)viewDidLoad
    {
    NSLog(@"viewDidLoad  AlarmController");
        [super viewDidLoad];
        doneButtnRectVert = CGRectMake(0, 163, 106, 53);
        doneButtnRectHorz = CGRectMake(0, 122, 159, 40);
        DoneUpVert = [UIImage imageNamed:@"DoneUp3.png"];
        DoneDownVert = [UIImage imageNamed:@"DoneDown3.png"];
        DoneUpHorz = [UIImage imageNamed:@"DoneUpHor.png"];
        DoneDownHorz = [UIImage imageNamed:@"DoneDnHor.png"];

        doneButtnRect = doneButtnRectVert;
        DoneUp = DoneUpVert;
        DoneDown = DoneDownVert;
        oldDoneButton = nil;

        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(keyboardDidShow:) 
                                                     name:UIKeyboardDidShowNotification object:nil];        
    }
1
ответ дан hokkuk 28 November 2019 в 22:10
поделиться

У меня это работает. См. Код здесь: http://gist.github.com/454844

Возникли две проблемы:

  1. UIKeyboardWillShowNotification отправляется до того, как существует представление клавиатуры, но вы планируете запуск кода на следующем проходе цикла выполнения они действительно существуют. Так что вам не нужно беспокоиться о DidShow , который визуально менее приятен.

  2. В iOS 4 представление UIKeyboard находилось где-то в иерархии представлений.

6
ответ дан 28 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: