App显示带有不同字符的文本迅速

问题描述 投票:0回答:1

我正在制作一个聊天应用。当我发送消息或从其他用户接收消息时,它们最终会像这样显示。可能是什么问题?它可以正常工作,但有时它只是更改文本的显示方式。不知道在此缺少什么。任何人都可以看看它。好吧在此先感谢

下面是我的代码

class ChatController: UIViewController,UITextViewDelegate,UITableViewDataSource,UITableViewDelegate,UIGestureRecognizerDelegate{

@IBOutlet weak var txtViewBottomConstraints: NSLayoutConstraint!
@IBOutlet weak var viewTextViewContainer: ViewCustom!
@IBOutlet weak var txtViewContainerHeightConstraints: NSLayoutConstraint!
@IBOutlet weak var txtViewHeightConstraints: NSLayoutConstraint!
@IBOutlet var lblUserName: UILabel!
@IBOutlet var userImg: UIImageView!
@IBOutlet weak var txtView: IQTextView!
@IBOutlet weak var tblViewChat: UITableView!
@IBOutlet weak var bottomViewBottomConstraints: NSLayoutConstraint!
@IBOutlet weak var btnSend: UIButton!


var grpId = String()
var getMessageTimer: Timer!
var scrollEnable : Bool = false
var imagePicker : UIImagePickerController? = nil
var imageData : Data?
var groupName = String()
var groupImage = String()
var isFromNotification = Bool()
var strId = String()
var objChatVM = ChatViewModel()
var getMessageId = String()
var userImage:URL? = nil
var userName = String()

override func viewDidLoad() {
    super.viewDidLoad()
    popWithSwipe()

    txtView.autocorrectionType = .no
    lblUserName.text = userName
   /* if userImage != nil
    {
    userImg.kf.setImage(with:userImage)
   }
    else
    {
        userImg.image = UIImage(named: "user")
    }*/

    userImg.kf.setImage(with:userImage, completionHandler: {
        (image, error, cacheType, imageUrl) in
        if image != nil{
            self.userImg.image = image
        }
        else{
            self.userImg.image = #imageLiteral(resourceName: "user")
        }

    })


    IQKeyboardManager.shared.enable = false
    IQKeyboardManager.shared.enableAutoToolbar = false

    tblViewChat.dataSource = self
    tblViewChat.delegate = self
    tblViewChat.estimatedRowHeight = 70.0
    tblViewChat.rowHeight = UITableViewAutomaticDimension
    txtView.delegate = self

    //  txtView.textContainerInset = UIEdgeInsets(top: 0, left: 2, bottom: 0, right: 2)

    let tapGestuer = UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:)))
    view.addGestureRecognizer(tapGestuer)
    tapGestuer.delegate = self


    // Do any additional setup after loading the view.
}


override func viewWillAppear(_ animated: Bool) {

            if getMessageTimer != nil{
            getMessageTimer.invalidate()
            }
            getMessageTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(getMessageApi), userInfo: nil, repeats: true)
    IQKeyboardManager.shared.enable = false
    IQKeyboardManager.shared.enableAutoToolbar = false

    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

override func viewWillDisappear(_ animated: Bool) {
        getMessageTimer.invalidate()
    NotificationCenter.default.removeObserver(self)

}

// MARK:- Get messages from server

@objc func getMessageApi(){

     objChatVM.getMessage(param:strId) {status in
     if status{
     self.tblViewChat.reloadData()
     if(self.objChatVM.getNumberOfMessage() != 0){
     self.tblViewChat.scrollToRow(at: IndexPath(item: self.objChatVM.getNumberOfMessage()-1, section: 0), at: .bottom, animated: false)
     }

     }
     }
}


@objc  func handleTap(sender: UITapGestureRecognizer) {
    txtView.resignFirstResponder()
}

// Enable IQKEYBoard manager here for handle keyboard at other  controller which has disabled in viewdidload or viewwillappear

override func viewDidDisappear(_ animated: Bool) {

    IQKeyboardManager.shared.enable = true
    IQKeyboardManager.shared.enableAutoToolbar = true
}


// MARK:- Gesutrue Delegate Methods
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {


    return true
}


// Handle here tap on table view and inside cell for dismiss keyboard while tap outside on the screen

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {

      if (touch.view is SenderTblCell || touch.view is ReceiverTblCell ) {
     return false
     }

     if (touch.view?.superview is SenderTblCell || touch.view?.superview is ReceiverTblCell) {
     return false
     }

     if (touch.view?.superview?.superview is SenderTblCell || touch.view?.superview?.superview is ReceiverTblCell) {
     return false
     }
     if (touch.view?.superview?.superview?.superview is SenderTblCell || touch.view?.superview?.superview?.superview is ReceiverTblCell) {
     return false
     }

     if(touch.view?.superview?.isDescendant(of: SenderTblCell().contentView))! || (touch.view?.superview?.isDescendant(of: ReceiverTblCell().contentView))!{

     return false
     }
    return true // handle the touch

}


// MARK:- KeyBoard will show

@objc func keyboardWillShow(notification: NSNotification) {



    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {

        var safeArea = 0
        if UIDevice().userInterfaceIdiom == .phone  ||  UIDevice().userInterfaceIdiom == .pad{
            switch UIScreen.main.nativeBounds.height {

            case 2436:
                bottomViewBottomConstraints.constant =  -keyboardSize.height + 30
                self.view.layoutIfNeeded()
            default:


                if #available(iOS 11.0, *) {
                    let window = UIApplication.shared.keyWindow

                    safeArea = Int(window?.safeAreaInsets.bottom ?? 0.0)
                }
                bottomViewBottomConstraints.constant =  -keyboardSize.height + CGFloat(safeArea) - 10
                self.view.layoutIfNeeded()
            }
        }
    }

}

// MARK:- KeyBoard will hide

@objc func keyboardWillHide(notification: NSNotification) {
    bottomViewBottomConstraints.constant = -30
    self.view.layoutIfNeeded()
}

@IBAction func btnSendAction(_ sender: Any) {


    let param = ["userId":strId,"message":txtView.text!]

    objChatVM.sendMessage(param: param) { (status) in

        self.txtView.text = ""
        self.textViewDidChange(self.txtView)
    }
}

//MARK:- TextView Delegate Methods




func textViewDidChange(_ textView: UITextView) {

    if textView.text == ""{
        //textView.translatesAutoresizingMaskIntoConstraints = true
        //  txtViewHeightConstraints.constant = 100.0


        //  btnSend.setImage(#imageLiteral(resourceName: "attachment"), for: .normal)
    }else{
        // btnSend.setImage(#imageLiteral(resourceName: "sendMsg"), for: .normal)
    }

    var frame : CGRect = textView.bounds
    frame.size.height = textView.contentSize.height
    print(frame)
    if(frame.height >= 100.0){
        textView.isScrollEnabled = true
    }
    else{
        textView.isScrollEnabled = false
        txtView.frame.size = frame.size
    }
    if textView.text == ""{

        txtViewContainerHeightConstraints.constant = 50.0
        txtViewBottomConstraints.constant = 5.0
        txtView.updateConstraints()
        viewTextViewContainer.updateConstraintsIfNeeded()
        viewTextViewContainer.updateConstraints()
        viewTextViewContainer.layoutIfNeeded()
        self.view.layoutIfNeeded()

    }

}

func textViewDidEndEditing(_ textView: UITextView) {

}


func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
    return true
}


// MARK:- TableView DataSource and Delegate Methods

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return objChatVM.getNumberOfMessage()
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let messageUserId = objChatVM.getMessageUserFromId(index: indexPath.row)


     print(UserViewModel.Shared().getUserId())

    if(messageUserId == UserViewModel.Shared().getUserId()){

        let cell = tblViewChat.dequeueReusableCell(withIdentifier: "senderCell") as! SenderTblCell
        cell.lblMessage.text = objChatVM.getMessage(index: indexPath.row)
        cell.lblDate.text = objChatVM.getDateTime(index: indexPath.row)

        return cell
    }

    let cell = tblViewChat.dequeueReusableCell(withIdentifier: "receiverCell") as! ReceiverTblCell
    cell.lblMessage.text = objChatVM.getMessage(index: indexPath.row)
    cell.lblDate.text = objChatVM.getDateTime(index: indexPath.row)
    cell.lblName.text = objChatVM.getFullNameOfUserFrom(index: indexPath.row)
    let url = URL(string:objChatVM.getUserFromImage(index:indexPath.row))
    cell.imgView.kf.indicatorType = .activity
    cell.imgView.kf.setImage(with:url)
    return cell

}




func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {


    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    txtView.resignFirstResponder()
}


// MARK: Side Menu Button Action

@IBAction func btnSideMenuActn(_ sender: UIButton) {
    self.pushViewControl(ViewControl:"SideMenuController")
}



override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}




    }
swift text label
1个回答
0
投票

使用removingPercentEncoding

cell.lblMessage.text = objChatVM.getMessage(index: indexPath.row).removingPercentEncoding
© www.soinside.com 2019 - 2024. All rights reserved.