UIKeyboardTypeDecimalPad с отрицательными числами - PullRequest
3 голосов
/ 08 марта 2012

Я работаю над приложением для iOS, которое требует, чтобы пользователь вводил числа в UITextField с помощью клавиатуры типа UIKeyboardTypeDecimalPad. Однако я только что понял, что нет поддержки ввода отрицательных чисел, что является требованием приложения.

Есть идеи или мысли о том, как я могу это сделать?

Ответы [ 6 ]

3 голосов
/ 16 апреля 2015

Вы можете использовать UIToolbar в качестве вспомогательного вида ввода для вашего UITextField и поместить кнопку со знаком «+/-» (знак плюс / минус).

UIToolbar *toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
UIBarButtonItem *plusMinusBbi = [[UIBarButtonItem alloc]initWithTitle:@"+/-" style:UIBarButtonItemStylePlain target:self action:@selector(togglePositiveNegative:)];
toolbar.items = @[plusMinusBbi];
self.textField.inputAccessoryView = toolbar;
2 голосов
/ 20 марта 2012

Я не верю, что что-то подобное сейчас возможно (поскольку Apple еще не реализовала это).Единственный вариант - создать собственную клавиатуру или использовать полную ASCII.

1 голос
/ 01 июня 2013

Из того, что я обнаружил, Apple до сих пор не внедрила такую ​​стандартную клавиатуру. Однако можно добавить кнопки UIB в любое окно клавиатуры. эта ссылка должна помочь или аналогичный учебник эта ссылка также должна помочь

По сути, вы регистрируете NSNotificationListener для прослушивания появления клавиатуры. Возьмите рамку клавиатуры и добавьте UIB-кнопку к ее виду. Приведенная выше ссылка не совсем то, что мы хотим, но это правильная идея.

В приложении Delegate,

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

    - (void)keyboardDidShow:(NSNotification *)note
    {
// Get the Very Top Window on the Display. That's where the Keyboard is.
NSInteger topWindow = [[[UIApplication sharedApplication] windows] count] - 1;
UIWindow *keyboard = [[[UIApplication sharedApplication] windows] objectAtIndex:topWindow];
// If the dot has not been created (first time the keyboard has been displayed) create it.
if (self.dot == nil)
    {
    self.dot = [UIButton buttonWithType:UIButtonTypeCustom];
    // Make the dot a subview of the view containing the keyboard.
    [keyboard addSubview:self.dot];
    // Place the dot in the correct location on the keyboard.
    [self.dot setFrame:CGRectMake(0, 427, 106, 53)];
    // Set the overlay graphics. (Use TransDecimalDown.png and TransDecimalUp.png for the Alert Style Keyboard.
    [self.dot setImage:[UIImage imageNamed:@"DecimalUp.png"] forState:UIControlStateNormal];
    [self.dot setImage:[UIImage imageNamed:@"DecimalDown.png"] forState:UIControlStateHighlighted];
    // Give the dot something to do when pressed.
    [self.dot addTarget:self action:@selector(sendDecimal:)  forControlEvents:UIControlEventTouchUpInside];
}
// Bring the dot to the front of the keyboard.
[keyboard bringSubviewToFront:self.dot];
    }

    - (void)sendDecimal:(id)sender {
// Post a notification that the dot has been pressed. Observing view controllers are then responsible for adding the actual decimal.
[[NSNotificationCenter defaultCenter] postNotificationName:@"DecimalPressed" object:nil];
// Play the Keyboard Click. If the user has these sound effects turned off, the decimal will still click. Sorry.  :(  (Also, doesn't seem to work on the simulator, no keyboard clicks seem to.)
AudioServicesPlaySystemSound(0x450);
    }

извините за ужасный формат кода, но вы поняли:)

0 голосов
/ 06 июля 2018
func addToolbar() {
    let toolbar = UIToolbar()
    toolbar.sizeToFit()
    let plusMinusButton = UIBarButtonItem(title: "+/-", style: .done, target: self, action: #selector(plusMinusAction))
    plusMinusButton.tintColor = .black
    plusMinusButton.width = UIScreen.main.bounds.width / 3
    toolbar.items = [plusMinusButton]
    toolbar.barTintColor = #colorLiteral(red: 0.7812563181, green: 0.8036255836, blue: 0.8297665119, alpha: 1)
    toolbar.isTranslucent = false
    myField.inputAccessoryView = toolbar
}

@objc func plusMinusAction() {
    let text = myField.text ?? ""
    if text.hasPrefix("-") {
        myField.text = String(text.suffix(text.count - 1))
    } else {
        myField.text = "-\(text)"
    }
}
0 голосов
/ 09 сентября 2015

Для выполнения этой задачи я использовал '.inputAccessoryView' с текстовым полем

On viewDidLoad

self.textField.inputAccessoryView = [self accessoryViewForTextField:self.textField];

затем

- (UIView *)accessoryViewForTextField:(UITextField *)textField{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
view.backgroundColor = [UIColor lightGrayColor];

UIButton *minusButton = [UIButton buttonWithType:UIButtonTypeCustom];
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
[minusButton setTitle:@"-" forState:UIControlStateNormal];
[doneButton setTitle:NSLocalizedString(@"Done", @"Done") forState:UIControlStateNormal];
minusButton.backgroundColor = [UIColor magentaColor];
doneButton.backgroundColor = [UIColor blueColor];
CGFloat buttonWidth = view.frame.size.width/3;
minusButton.frame = CGRectMake(0, 0, buttonWidth, 44);
doneButton.frame = CGRectMake(view.frame.size.width - buttonWidth, 0, buttonWidth, 44);

[minusButton addTarget:self action:@selector(minusTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
[doneButton addTarget:self action:@selector(doneTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];

[view addSubview:minusButton];
[view addSubview:doneButton];

return view;

}

это добавит пользовательский вид чуть выше клавиатуры как часть его

наконец, чтобы получить «минус»

#pragma mark - IBActions

- (IBAction)minusTouchUpInside:(id)sender
{
NSString *value = self.textField.text;
if (value.length > 0) {
    NSString *firstCharacter = [value substringToIndex:1];
    if ([firstCharacter isEqualToString:@"-"]){
        self.textField.text = [value substringFromIndex:1];
    }else{
        self.textField.text = [NSString stringWithFormat:@"-%@", value];
    }
}
}

- (IBAction)doneTouchUpInside:(id)sender
{
    [self.textField resignFirstResponder];
}
0 голосов
/ 08 марта 2012

Это явно не лучший мой ответ ... но я не могу удалить его, так как он принят.

может этот код поможет вам:

, если вы хотите отрицательныйчисло просто используйте "-"

NSString *fieldString = [NSString stringWithFormat:@"%@",Textfield.text];

        NSLog(@"%@",fString);

        int fieldValue;
        value = [fString intValue];
        NSLog(@"%d",fieldValue);

это будет работать для десятичных чисел

            double fieldValue;
            value = [fString doubleValue];
            NSLog(@"%f",fieldValue);
...