天天看點

iOS-未讀消息的小紅點展示

問題描述:

(1)進入首頁後,登入狀态下的賬戶tabbar上會展示小紅點兒

(2)進入賬戶頁後,消息圖示上也有小紅點兒

(3)情況一:隻要有未讀消息就展示紅點

(4)情況二:隻要點選進入消息頁面,則傳回後紅點兒消失(盡管還有未讀消息)

1.隻要有未讀消息就展示紅點

(1)首頁接口增加是否有未讀消息字段:isRead_Home

let item = self.tabBarController?.tabBar.items?[2]
if isRead_Home == "1"{//有未讀消息

     item?.image = UIImage(named:"賬戶紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)

}else{//未讀消息

     item?.image = UIImage(named:"賬戶無紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
 }
           

(2)賬戶接口增加是否有未讀消息字段:isRead_Mine

let item = self.tabBarController?.tabBar.items?[2]
if isRead_Mine == "1"{//有未讀消息

     self.redImg?.isHidden = false //紅點圖示img

}else{//未讀消息

     item?.image = UIImage(named:"賬戶無紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
}
           

2.隻要點選進入消息頁面,則傳回後紅點兒消失(盡管還有未讀消息)

(1)首頁接口增加最新消息:logId + 是否有未讀消息字段:isRead_Home,且本地儲存logId_Local,初始值為0

賬戶紅點的展示與否:

let logId_Local = UserDefaults.standard.integer(forKey: logId_Key)
let item = self.tabBarController?.tabBar.items?[2]

if logId_Local == 0 && isRead_Home == "0"{//有未讀消息


    item?.image = UIImage(named:"賬戶紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)

}else if logId_Local == logId{//無未讀消息

     item?.image = UIImage(named:"賬戶無紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)

}else{//有未讀消息

      item?.image = UIImage(named:"賬戶紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
}
           

(2)賬戶也增加跟首頁同樣的字段,且在點選消息頁面後,将logId_Local重新指派

let logId_Local = UserDefaults.standard.integer(forKey: logId_Key)
let item = self.tabBarController?.tabBar.items?[2]
if logId_Local == 0 && isRead_Mine == "0"{//有未讀消息

      self.redImg?.isHidden = false

}else if logId_Local == self.logId {//無未讀消息

      self.redImg?.isHidden = true
      item?.image = UIImage(named:"賬戶點選前.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)

}else{//有未讀消息

     self.redImg?.isHidden = false
}
           

點選消息按鈕:

func enterMessage(){//消息

    //更新本地存儲狀态:
    UserDefaults.standard.setValue(logId, forKey: logId_Key)
    UserDefaults.standard.synchronize()

    //跳轉消息界面:
    let vc = MessageViewController();
    vc.hidesBottomBarWhenPushed = true;
    self.navigationController?.pushViewController(vc, animated: true)      
}
           

3.技術說明:

(1)tabbar上的紅點兒展示:

**擷取賬戶tabbar
 let item = self.tabBarController?.tabBar.items?[2]
 **切換圖檔 
 item?.image = UIImage(named:"賬戶紅點.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
 item?.image = UIImage(named:"賬戶無紅點兒.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
 **系統自帶:
 item?.badgeValue = "2"//顯示消息條數為 2
           

(2)userDefaults儲存“logId

a:key值的定義需添加手機号,用以區分使用者:let logId_Key = "logId_Local" + self.teleNum
b:為了永久儲存,故登出時不移除logId_Key
           
iOS