2016-07-21 13 views
2

我已經構建了一個複合興趣計算器應用程序。應用程序正在運行,現在我想防止重複。在文本字段中。在Swift中停止重複的小數點分隔符

我已經做了以下三件事情,但它不阻止用戶輸入超過1個小數點分隔符:

  1. 符合全班UITextFieldDelegate
  2. 連接文本字段的委託財產到視圖控制器
  3. 添加以下的本金,利息,頻率,年內文本字段功能:

    func principal(principal: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = principal.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func interest(interest: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = interest.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func freq(freq: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = freq.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func years(years: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = years.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    

任何幫助表示讚賞!

回答

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

是不是你如何符合協議。

你有完整的簽名完全匹配(名稱無關緊要):

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

你需要使用一個檢查對文本字段textField參數在你的VC,看看哪一個改變了(如果你有不同的行爲)。

由於它看起來像上面的四個函數是相同的,所以您可以確保始終引用參數而不是實現中的特定文本字段。

+1

感謝奇妙地工作了所有的文本框..我刪除了所有具體文本字段的實施和使用的唯一一個完整的簽名功能完全相同。 – KawaiKx

0

此代碼是行不通的:

if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil{} 

根據蘋果的文檔,該方法返回一個NSRange給出結構在ASTRING中第一次出現的接收器的位置和長度。如果未找到aString或爲空(@「」),則返回{NSNotFound,0}。

所以不是檢查零您需要檢查一個不存在的範圍

if existingTextHasDecimalSeparator != NSNotFound && replacementTextHasDecimalSeparator != NSNotFound{}