2016-03-16 70 views
0

我試圖提醒一個文本輸入視圖,因爲我有最大。 3種選擇,我的客戶希望以這種方式呈現。警報,而不是鍵盤在文本字段中輸入 - >光標停留在文本字段Swift2

基本沒問題,我可以點擊文本框,導致顯示警報。在選擇文本字段中的值後得到正確更新,但隨後,光標停留在文本字段中(我假設由於水龍頭,文本字段是第一響應者)

現在的問題是,當我點擊時,當光標在其中時,默認鍵盤將打開。那麼,我能做些什麼來阻止它做到這一點?

我曾嘗試各種位置下面的東西代碼:

resignFirstResponder() 
becomeFirstResponder() 

此外,當即時通訊目前正在編輯文本框的另一個與鍵盤,即時通訊能夠敲擊相應的文本框時顯示警告。這導致鍵盤覆蓋警報,因爲即使發生這種情況,im也無法關閉鍵盤。

嘗試針對這樣的:(用其他文本框

if (alertView != nil) { 
     alertView?.dismiss() 
    } //Not very professional, but still in development :) 

這裏有一些重要的代碼片段的事件方法來了解我是如何建立起來:

這個函數是文本框的EditingDidBegin事件警報的

@IBAction func TextboxUnitEditing(sender: UITextField) { 
    //One try of preventing the cursor (not working) 
    tableView.endEditing(true) 

    ... 
    /* Unrelated Code here */ 
    ... 

    alertView = SwiftAlertView(...) 

      ... 
    /* Unrelated Code here */ 
    ... 

    alertView.show() 
} 

委託方法

func alertView(alertView: SwiftAlertView, clickedButtonAtIndex buttonIndex: Int) { 
    //buttonIndex == 1 means, cancel was tapped 
    if (buttonIndex == -1) { 
     currentCell = nil 
     tableView.endEditing(true) 
     return 
    } 

    ... 
    /* Change value in textfield */ 
} 

所以我的問題是,出了什麼問題?我需要調用什麼來擺脫光標?如果您還需要了解更多信息,請告訴我,我可以提供更多信息。

在此先感謝。

編輯:

已解決。相反的:

self.tableView.endEditing(true) 

我不得不這樣做:

+0

我有點失落在這個問題上;他們是否輸入文字?如果沒有,你只是想給出3個選項比使用alertController,選擇粘貼一些代碼到答案,因爲這裏沒有空間。 – user3069232

+0

感謝您的建議,但不是我在找什麼。我忘了告訴你的是,即時通訊支持ios7。因此,沒有AlertController。但是我可以自己解決這個問題,因爲我唯一要做的就是將「tableView.endEditing(true)」語句分派給主隊列。 – glace

回答

1

而不是

self.tableView.endEditing(true) 

它必須在主線程

dispatch_async(dispatch_get_main_queue(),{ 
    self.tableView.endEditing(true) 
}) 

否則,此行會被跳過上完成

1

你可以使用這個擴展你似乎在描述工作,沒有文本框需要

dispatch_async(dispatch_get_main_queue(),{ 
     self.tableView.endEditing(true) 
    }) 
?你用這條線叫它。

showInfo(message: error!.localizedDescription) 

這是它的後面的擴展。

protocol ShowsInfo {} 

extension ShowsInfo where Self: UIViewController { 
    func showInfo(title: String = "Info", message: String) { 
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil)) 
    dispatch_async(dispatch_get_main_queue()) { 
     self.presentViewController(alertController, animated: true, completion: nil) 
    } 
} 
}