2016-06-03 2 views
0

Я пытаюсь создать пользовательское текстовое поле в Swift. Вот мой кодИспользование пользовательского UITextField в функциях UITextFieldDelegate

public class AmountTextField : UITextField{ 

    let currencyFormattor = NSNumberFormatter() 

    let amountTextFieldDelegate = AmountTextFieldDelegate() 

    required public init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     initTextField() 
    } 

    func initTextField(){ 
     self.delegate = amountTextFieldDelegate 
     currencyFormattor.numberStyle = .CurrencyStyle 
     currencyFormattor.minimumFractionDigits = 2 
     currencyFormattor.maximumFractionDigits = 2 
    } 

    func setAmount (amount : Double){ 
     let textFieldStringValue = currencyFormattor.stringFromNumber(amount) 
     self.text = textFieldStringValue 
    } 
} 

И мой AmountTextFieldDelegate выглядит эта

class AmountTextFieldDelegate : NSObject, UITextFieldDelegate{ 

    func textField(textField: AmountTextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     let amount = getAmount() // calculates the amount 
     textField.setAmount(amount) 

     return false 
    } 
} 

я изменил UITextField к AmountTextField в shouldChangeCharactersInRange, так что я мог бы вызвать функцию setAmount в shouldChangeCharactersInRange. Но когда я делаю это, я получаю ошибку -


Objective-C метод 'TextField: shouldChangeCharactersInRange: replacementString:' обеспечивается методом 'TextField (: shouldChangeCharactersInRange: replacementString :)' конфликтует с дополнительным методом требования «TextField (: shouldChangeCharactersInRange: replacementString :) 'in protocol' UITextFieldDelegate '

Есть ли способ, которым я могу вызвать setAmount в shouldChangeCharactersInRange?

+1

что делает установленное количество делать? вы пытаетесь переопределить метод, который уже существует в делетете –

+0

Нет, просто форматирует сумму и добавляет ее в текстовое поле. Я добавил, что кусок кода, чтобы сделать его более ясным – Richa

ответ

0

Рассмотрим это:

class AmountTextFieldDelegate : NSObject, UITextFieldDelegate { 

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     if let s = textField as? AmountTextField { 
      let amount = s.getAmount() // calculates the amount 
      s.setAmount(amount) 
     } 
     return true 
    } 
} 
+0

Спасибо, что сработало – Richa

+0

@Richa На самом деле мне все еще интересно, почему вы не работаете. Я попытаюсь зарегистрировать ошибку для сообщества Swift. Посмотрим, что они ответят. –

+0

Мне тоже было интересно, я чувствую, что сделал это в Objective C – Richa

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