Swift - 舍友App (00)

文件圖例.png
AppDelegate代碼.png
self.window = UIWindow(frame:UIScreen.main.bounds)
        self.window?.backgroundColor = UIColor.white
        self.window?.makeKeyAndVisible()
        //選擇引導(dǎo)頁還是主視圖控制器
        //獲取用戶偏好設(shè)置類
        let user = UserDefaults.standard

        let isFirst = user.bool(forKey: "isFirst")

        if isFirst {//為真顯示主視圖

            let mainVC = MainViewController()

            self.window?.rootViewController = mainVC
        }else{//引導(dǎo)頁

            let guideVC = GuideViewController()

            self.window?.rootViewController = guideVC
        }

HomeViewController.swift代碼如下:

import UIKit

class HomeViewController: UITableViewController {
    //表頭視圖上的輪播圖
    var scrollView:UIScrollView!
    //點點
    var pageCotrol:UIPageControl!
    //定時器
    var timer:Timer?
    //重用標(biāo)識
    let amenuCell = "cell"
    override func loadView() {
        self.tableView = UITableView(frame: UIScreen.main.bounds, style: .grouped)
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        self.setNavigationBar()

        self.setHeaderView()

        //注冊cell
        self.tableView.register(MenuCell.self, forCellReuseIdentifier: amenuCell)

        self.tableView.separatorStyle = .none
        
        //添加定時器
        self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)


    }
    //設(shè)置導(dǎo)航欄的方法
    func setNavigationBar() {
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        //設(shè)置導(dǎo)航欄樣式
        self.navigationController?.navigationBar.barStyle = .blackOpaque
        //設(shè)置導(dǎo)航欄的shadowImage(就是一根白線逐工,可細(xì)了)顏色
        self.navigationController?.navigationBar.shadowImage = UIImage()
        //隱藏導(dǎo)航欄
//        self.navigationController?.navigationBar.isHidden = true
        //將帶有導(dǎo)航欄時,scrrollView或者scrrollView的子類,布局方式調(diào)整到以屏幕左上角為原點
        self.automaticallyAdjustsScrollViewInsets = false
    }
    //表頭視圖
    func setHeaderView(){

        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 160))

        headerView.backgroundColor = UIColor.cyan

        self.scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 160))

        self.scrollView.contentSize = CGSize(width: CGFloat(CircleImageCount + 2) * KScreenWidth, height: 160)

        self.scrollView.isPagingEnabled = true

        self.scrollView.showsHorizontalScrollIndicator = false
        //設(shè)置偏移量
        self.scrollView.contentOffset.x = KScreenWidth
        //設(shè)置代理
        self.scrollView.delegate = self
        for i in 0..<(CircleImageCount + 2) {
            let imageView = UIImageView(frame: CGRect(x: CGFloat(i) * KScreenWidth, y: 0, width: KScreenWidth, height: 160))
            if i == 0 {
                imageView.image = UIImage(named: String(format: "house%d.jpg", CircleImageCount))
            }else if i>0 && i<(CircleImageCount + 1){
                imageView.image = UIImage(named: String(format: "house%d.jpg", i))
            }else{
                imageView.image = UIImage(named: "house1.jpg")
            }
            self.scrollView.addSubview(imageView)

        }
        headerView.addSubview(scrollView)

        self.pageCotrol = UIPageControl(frame: CGRect(x: (KScreenWidth - 200)*0.5, y: 140, width: 200, height: 20))

        self.pageCotrol.currentPageIndicatorTintColor = UIColor.cyan

        self.pageCotrol.pageIndicatorTintColor = UIColor.black

        self.pageCotrol.numberOfPages = CircleImageCount

        headerView.addSubview(pageCotrol)

        self.tableView.tableHeaderView = headerView
    }
    //實現(xiàn)scrollView的代理方法
    override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
//        super.scrollViewDidEndDecelerating(scrollView)
        //偏移了多少個屏幕的寬
        if scrollView == self.scrollView {
            let page = Int(scrollView.contentOffset.x / KScreenWidth)

            self.pageCotrol.currentPage = 0

            if page == 6 {
                scrollView.contentOffset.x = KScreenWidth
            }else if page == 0 {
                scrollView.contentOffset.x = CGFloat(CircleImageCount) * KScreenWidth
                self.pageCotrol.currentPage = CircleImageCount - 1
            }else{
                self.pageCotrol.currentPage = page - 1
            }
        }


    }
    //MARK: - 定時器關(guān)聯(lián)方法
    func timerAction() {
        //獲取頁數(shù)
        let page = self.scrollView.contentOffset.x / KScreenWidth
        if page == 5 {//頁數(shù)==5返回第一張
            self.scrollView.contentOffset.x = KScreenWidth
            self.pageCotrol.currentPage = 0
        }else{
            self.scrollView.contentOffset.x = (page + 1) * KScreenWidth
            self.pageCotrol.currentPage = Int(page)

        }


    }
    //開始拖拽觸發(fā)的方法
    override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        if scrollView == self.scrollView {
            self.timer?.invalidate()
            self.timer = nil
        }
    }
    //停止拖拽觸發(fā)的方法
    override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if scrollView == self.scrollView {
            self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
        }
    }
    //區(qū)尾視圖

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

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 3
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: amenuCell, for: indexPath) as! MenuCell
        if indexPath.row == 0 {
            //titleLable
            cell.titleLable.text = "  ◆推薦房源"
            //picView
            cell.picView.image = UIImage(named: "home_cell1.jpg")

            return cell
        }else if indexPath.row == 1{
            //titleLable
            cell.titleLable.text = "  ◆社區(qū)生活"
            //picView
            cell.picView.image = UIImage(named: "home_cell2.jpg")
            return cell

        }else{
            cell.titleLable.text = "  ◆分享活動"
            cell.picView.image = UIImage(named: "home_cell3.jpeg")
            return cell

        }


    }
    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 197
    }

    //頭部視圖
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let sectionView = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 206))
        sectionView.backgroundColor = UIColor.white

        for i in 0..<MenuButtonCount {
            let amenuView = MenuView()

            if i < 3 {
                //布第一行菜單按鈕
                amenuView.frame = CGRect(x: 40 + i * (59 + 59), y: 20, width: 59, height: 80)


            }else{
                //布第二行菜單按鈕
                amenuView.frame = CGRect(x: 40 + (i - 3) * (59 + 59), y: 109, width: 59, height: 80)
}
                //給控件MenuView上的子控件賦值
                amenuView.iconView.image = UIImage(named: MenuSouce[i]["image"]!)

                amenuView.titleLable.text = MenuSouce[i]["title"]

                amenuView.titleLable.font = UIFont.systemFont(ofSize: 13.0)

                amenuView.titleLable.textColor = UIColor.black
            
                amenuView.tag = 300 + i
                //輕拍手勢
                let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
                amenuView.addGestureRecognizer(tap)

            sectionView.addSubview(amenuView)
        }
        return sectionView
    }
    //MARK:- 輕拍手勢的關(guān)聯(lián)方法
    //"title":"整租", "image":"ic_home_The entire rent_normal"],["title":"合租", "image":"ic_home_Flat-share_normal"], ["title":"短租", "image":"ic_home_Short rent_normal"], ["title":"服務(wù)", "image":"ic_home_service_normal"], ["title":"室友", "image":"ic_home_roommate_normal"], ["title":"收藏", "image":"ic_home_Collection_normal"
    func tapAction(sender:UITapGestureRecognizer){
        let tapView = sender.view as! MenuView
        switch tapView.tag {
        case 300:
            print("整租")
        case 301:
            print("合租")
        case 302:
            print("短租")
        case 303:
            print("服務(wù)")
        case 304:
            print("室友")
        case 305:
            print("收藏")
        default:
            print("BUG")
        }

    }
    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

        return 206
    }
    

    /*
    // Override to support conditional editing of the table view.
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    */

    /*
    // Override to support editing the table view.
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            // Delete the row from the data source
            tableView.deleteRows(at: [indexPath], with: .fade)
        } else if editingStyle == .insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }    
    }
    */

    /*
    // Override to support rearranging the table view.
    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {

    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the item to be re-orderable.
        return true
    }
    */

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

MenuView.swift代碼如下:

import UIKit

class MenuView: UIView {

    var iconView:UIImageView!
    var titleLable:UILabel!
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setupViews()
    }
    //定義UIImageView和UILabel
    func setupViews() {
        //frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height * 0.7)
        iconView  = UIImageView()

//        iconView.backgroundColor = UIColor.cyan

        self.addSubview(iconView)

        //frame: CGRect(x: 0, y: self.frame.height * 0.7, width: self.frame.width, height: self.frame.height * 0.3)
        titleLable = UILabel()

//        titleLable.backgroundColor = UIColor.red

        titleLable.textAlignment = .center

        self.addSubview(titleLable)

    }
    //重布局子視圖
    override func layoutSubviews() {
        iconView.frame  = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height * 0.7)

        titleLable.frame = CGRect(x: 0, y: self.frame.height * 0.7, width: self.frame.width, height: self.frame.height * 0.3)

    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

}

MenuCell.swift代碼如下:

import UIKit

class MenuCell: UITableViewCell {

    var titleLable:UILabel!
    var picView:UIImageView!

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.setupViews()
    }
    func setupViews() {
        picView = UIImageView(frame: CGRect(x: 0, y: 7, width: KScreenWidth, height: 190))
        self.contentView.addSubview(picView)

        titleLable = UILabel(frame: CGRect(x: 0, y: 23, width: 120, height: 21))
        //單純的修改顏色的透明值
        let backColor = UIColor.white

        backColor.withAlphaComponent(0.5)

        titleLable.backgroundColor = backColor

        self.contentView.addSubview(titleLable)

    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

Base / MainViewController.swift代碼如下:

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white

        self.setupViewControllers()

    }
    //
    func setupViewControllers(){
        //首頁:Home
        let homeVC = HomeViewController()

        let homeNC = UINavigationController(rootViewController: homeVC)

        homeVC.tabBarItem.title = "Home"

        homeVC.tabBarItem.image = UIImage(named: "ic_me_home_non")

        homeVC.tabBarItem.selectedImage = UIImage(named: "ic_home_home_normal")

        homeVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
        //活動:Activity
        let activityVC = ActivityViewController()

        let activityNC = UINavigationController(rootViewController: activityVC)

        activityVC.tabBarItem.title = "Activity"

        activityVC.tabBarItem.image = UIImage(named: "ic_me_activity_non")

        activityVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
        //消息:Messages
        let messagesVC = MessageViewController()

        let messagesNC = UINavigationController(rootViewController: messagesVC)

        messagesVC.tabBarItem.title = "Messages"

        messagesVC.tabBarItem.image = UIImage(named: "ic_me_news_non")

        messagesVC.tabBarItem.badgeValue = "1"

        messagesVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
        //我的:Me
        let meVC = MeViewController()

        let meNC = UINavigationController(rootViewController: meVC)

        meVC.tabBarItem.title = "Me"

        meVC.tabBarItem.image = UIImage(named: "ic_home_me_non")

        meVC.tabBarItem.selectedImage = UIImage(named: "ic_me_me_normal")?.withRenderingMode(.alwaysOriginal)

        meVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
        //添加到數(shù)組
        self.viewControllers = [homeNC,activityNC,messagesNC,meNC]
        self.tabBar.tintColor = #colorLiteral(red: 0.07050808519, green: 0.6223047376, blue: 0.5250155926, alpha: 1)

    }
    //選中tabBarItem的時候觸發(fā)
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        item.badgeValue = nil
    }


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

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

ConstFile.swift代碼如下:

import UIKit
//引導(dǎo)頁的個數(shù)
let GuideImageCount = 3
//輪播圖的個數(shù)
let CircleImageCount = 5
//菜單按鈕的個數(shù)
let MenuButtonCount = 6
//菜單資源
let MenuSouce:[[String:String]] = [
    ["title":"整租", "image":"ic_home_The entire rent_normal"],
    ["title":"合租", "image":"ic_home_Flat-share_normal"],
    ["title":"短租", "image":"ic_home_Short rent_normal"],
    ["title":"服務(wù)", "image":"ic_home_service_normal"],
    ["title":"室友", "image":"ic_home_roommate_normal"],
    ["title":"收藏", "image":"ic_home_Collection_normal"]
]
//屏幕的寬
let KScreenWidth = UIScreen.main.bounds.width
//屏幕的高
let KScreenHeight = UIScreen.main.bounds.height
//主題色
let ThemeColor = UIColor(red: 1.0/255, green: 179.0/255, blue: 135.0/255, alpha: 1)

Guide / Controller / GuideViewController.swift代碼如下:

import UIKit

class GuideViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setupViews()
    }
    //輸出導(dǎo)航頁
    func setupViews(){

        let scrollerView = UIScrollView(frame: UIScreen.main.bounds)

        scrollerView.contentSize = CGSize(width: CGFloat(GuideImageCount) * KScreenWidth, height: CGFloat(KScreenHeight))
        //設(shè)置整頁滾動
        scrollerView.isPagingEnabled = true
        //彈簧效果
        scrollerView.bounces = false
        //取消底部滾動條
        scrollerView.showsHorizontalScrollIndicator = false

        self.view.addSubview(scrollerView)
        for i in 0..<GuideImageCount {
            let imageView = UIImageView(frame: CGRect(x: CGFloat(i) * KScreenWidth, y: 0, width: KScreenWidth, height: KScreenHeight))

            imageView.image = UIImage(named: String(format: "guide%d", i))

            scrollerView.addSubview(imageView)
            if i == GuideImageCount - 1 {
                imageView.isUserInteractionEnabled = true
                let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
                imageView.addGestureRecognizer(tap)


            }
        }
    }
    //MARK:- 輕拍手勢的關(guān)聯(lián)方法
    func tapAction(){
        let user = UserDefaults.standard
        //防止多個值并發(fā)
        user.set(true, forKey: "isFirst")
        //同步操作
        user.synchronize()

        let application = UIApplication.shared

        application.keyWindow?.rootViewController = MainViewController()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末珊楼,一起剝皮案震驚了整個濱河市辖所,隨后出現(xiàn)的幾起案子阀湿,更是在濱河造成了極大的恐慌伤塌,老刑警劉巖缴允,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最疆,死亡現(xiàn)場離奇詭異杯巨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)努酸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門服爷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人获诈,你說我怎么就攤上這事仍源。” “怎么了舔涎?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵笼踩,是天一觀的道長。 經(jīng)常有香客問我亡嫌,道長戳表,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任昼伴,我火速辦了婚禮匾旭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圃郊。我一直安慰自己价涝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布持舆。 她就那樣靜靜地躺著色瘩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逸寓。 梳的紋絲不亂的頭發(fā)上居兆,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音竹伸,去河邊找鬼泥栖。 笑死簇宽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吧享。 我是一名探鬼主播魏割,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钢颂!你這毒婦竟也來了钞它?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤殊鞭,失蹤者是張志新(化名)和其女友劉穎遭垛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體操灿,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡耻卡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牲尺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵酪。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谤碳,靈堂內(nèi)的尸體忽然破棺而出溃卡,到底是詐尸還是另有隱情,我是刑警寧澤蜒简,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布瘸羡,位于F島的核電站,受9級特大地震影響搓茬,放射性物質(zhì)發(fā)生泄漏犹赖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一卷仑、第九天 我趴在偏房一處隱蔽的房頂上張望峻村。 院中可真熱鬧,春花似錦锡凝、人聲如沸粘昨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽张肾。三九已至,卻和暖如春锚扎,著一層夾襖步出監(jiān)牢的瞬間吞瞪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工驾孔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留芍秆,地道東北人惯疙。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像浪听,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子眉菱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容