Синяя стрелка вверх предназначена для отправки сообщения
Я использую следующий метод для отображения и отклонения клавиатуры и сдвига текстовое поле с клавиатурой
NotificationCenter.default.addObserver(self, selector:#selector(self.keyboardNotification(notification:)),name: UIResponder.keyboardWillChangeFrameNotification,object: nil)
@objc func keyboardNotification(notification: NSNotification) {
if let userInfo = notification.userInfo {
let endFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let endFrameY = endFrame?.origin.y ?? 0
let duration:TimeInterval = (userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
let animationCurveRawNSN = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber
let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIView.AnimationOptions.curveEaseInOut.rawValue
let animationCurve:UIView.AnimationOptions = UIView.AnimationOptions(rawValue: animationCurveRaw)
self.view1.frame.origin.y = endFrameY - self.view1.frame.height
UIView.animate(withDuration: duration,
delay: TimeInterval(0),
options: animationCurve,
animations: { self.view.layoutIfNeeded() },
completion: nil)
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу отправить сообщение и одновременно закрыть клавиатуру. У меня есть кнопка отправки в представлении, которое при нажатии только отклоняет клавиатуру и не отправляет сообщение.
Как можно одновременно отправить сообщение и закрыть клавиатуру?
РЕДАКТИРОВАТЬ: Это мое действие кнопки загрузки
@IBAction func uploadBtn(_ sender: UIButton)
{
if photoArray.count > 0 || self.audioRecorded == true || enteredTF.text != ""{
CustomAlert.showWait()
var i : Int = 0
let baseUrl = config.baseURL
parameters = [
"SKEY":self.skey,
"FID":"NEWMESSAGE",
"HKEY":"5673126578",
"LONGITUDE" : longitude as? String ?? "",
"LATITUDE" : latitude as? String ?? "",
"IPADDRESS" : "\(getIPAddress())",
"MESSAGE" : enteredTF.text!,
"USERID" : Uname,
"PHONEID" : phoneID,
"TIMEZONE" : getCurrentTimeZone()]
print(parameters)
Alamofire.upload(multipartFormData: { (multipartFormData) in
for (key, value) in self.parameters {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: "\(key)" )
}
for (image) in self.photoArray {
// print(i)
if let imageData = image.jpegData(compressionQuality: 0.5) {
OperationQueue.main.addOperation {
multipartFormData.append(imageData, withName: "files", fileName: "image\(i).jpeg", mimeType: "image/jpeg")
i=i+1
}
}
}
if self.audioRecorded == true
{
multipartFormData.append(self.getFileUrl(), withName: "myRecording.m4a")
}
else
{
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "Voice",mimeType: "m4a")
//i = i+1
}
}, usingThreshold: UInt64.init(), to: baseUrl, method: .post) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseString { response in
print("Succesfully uploaded = \(response)")
CustomAlert.hideWait()
let msg = SCLAlertView()
msg.showSuccess("", subTitle: "Your message has been successfully sent")
self.enteredTF.text = ""
OperationQueue.main.addOperation {
self.viewAllMessages()
self.photoArray.removeAll()
self.imageCollectionV.reloadData()
}
if let err = response.error{
print(err)
return
}
}
case .failure(let error):
print("Error in upload: \(error.localizedDescription)")
}
}
// }
}
}