반응형

iOS/Swift 어플 따라하기 58

[Swift] 새 메시지 보낼 때, 받을 때마다 아래에 배치하기

2. 메시지 작성 시 최근 메시지를 계속 아래로 내리기 loadmessage 메서드에서 let indexPath = IndexPath(row: , section: ) self.tableView.scrollToRow(at: , at: , animated: ) scrollToRow를 작성해주면 된다. let indexPath = IndexPath(row: self.messages.count - 1, section: 0) messages가 array type이므로 -1을 해줬고 section도 마찬가지로 1개의 섹션이면 0부터 시작하기 때문에 0으로 설정 self.tableView.scrollToRow(at: indexPath, at: .top, animated: true) 위에서 설정한 indexPath를 ..

[Swift] chat에서 발신자와 수신자 구별

Chat에서 발신자와 수신자를 구별하기 ChatViewController에서 tableview의 cell에서 메시지의 발신자는 현재 로그인 한 사용자와 동일 로드 중인 현재 메시지는 현재 사용자이고, 우리가 정한 스타일의 셀로 표시 현재 사용자와 동일하지 않은 경우 다른 스타일로 표시해야함 1. 두 개의 다른 메시지 셀을 갖거나 2. 단일 메시지 작업을 할 경우 셀을 선택하고 보낸 사람에 따라 다르게 스타일을 지정한다. 2번으로 해보면 MessageCell.xib파일로 이동해서 UI수정을 하고 원리는 메시지의 발신자가 현재 메시지의 이메일 주소와 같은지 비교하고 맞다면 me이미지와 메시지를 보게 하고 다르다면 you이미지를 보이게 한다. ChatViewController에 가서 tableVeiw셀 메서..

[Swift] Firestore에서 읽은 데이터를 시간 순으로 정렬

저장한 문서에 타임스탬프를 추가하는 방법 @IBAction func sendPressed(_ sender: UIButton) { // firestore 시작하기 -> 데이터 저장 if let messageBody = messageTextfield.text, let messageSender = Auth.auth().currentUser?.email { // currentuser가 있는 경우 email을 내부에 저장 db.collection(K.FStore.collectionName).addDocument(data: [K.FStore.senderField: messageSender, K.FStore.bodyField: messageBody, K.FStore.dateField: Date().timeInterv..

[Swift] FireStore 실시간 업데이트 수신 대기(실시간 데이터 읽어오기)

getDocuments -> addSnapshotListner로만 바꿔주면 실시간으로 업데이트 할 수 있다. func loadMessages() { // firestore 시작하기 -> 데이터 읽기 db.collection(K.FStore.collectionName).addSnapshotListener { (querySnapshot, error) in self.messages = [] // 비우고 넣고 비우고 넣고 if let e = error { print("There was an issue retrieving data from Firestore. \(e)") } else { if let snapshotDocuments = querySnapshot?.documents { for doc in snapsh..

[Swift] FireStore에 저장한 데이터 불러오기(데이터 읽기)

override func viewDidLoad() { super.viewDidLoad() loadMessages() func loadMessages() { messages = [] db.collection(K.FStore.collectionName).getDocuments { (querySnapshot, error) in if let e = error { print("There was an issue retrieving data from Firestore. \(e)") } else { if let snapshotDocuments = querySnapshot?.documents { for doc in snapshotDocuments { // firebase -> firestore에 제시된 방법과 동일 le..

[Swift] FireStore에 데이터 저장하기

let db = Firestore.firestore() @IBAction func sendPressed(_ sender: UIButton) { if let messageBody = messageTextfield.text, let messageSender = Auth.auth().currentUser?.email { // currentuser가 있는 경우 email을 내부에 저장 db.collection(K.FStore.collectionName).addDocument(data: [K.FStore.senderField: messageSender, K.FStore.bodyField: messageBody ]) { error in if let e = error { print("There was an issue..

[Swift] Xib파일을 사용하여 TableView에서 셀 사용자 지정

CoCoaPod Class로 만들고 Subclass를 UITableViewCell로 -> XIB파일 생성한다. UI를 설정해주고 난 뒤에 xib파일을 viewDidLoad에 등록하기 TableViewDataSource로 이동해서 dequeueReusableCell로 가져와야 되고 그렇게 하기 위해서는 클래스->클래스 캐스팅이 필요하다 reusableCell에서 MessageCell클래스를 캐스팅해야함 extension ChatViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return messages.count } func tab..

[Swift] Firebase 이메일 회원가입, 로그인하기, 로그아웃하기

우선적으로 Firebase를 Addpackage로 Firebase Auth를 추가하고 이메일로 회원가입하는 절차 if let email = emailTextfield.text, let password = passwordTextfield.text { Auth.auth().createUser(withEmail: email, password: password) { authResult, error in if let e = error { print(e.localizedDescription) } else { // Navigate to the NextViewController self.performSegue(withIdentifier: "identifier", sender: self) } } } 등록한 이메일 인증해..

반응형