├── README.md
├── JieTableView
├── default_img.png
├── Images.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── LaunchImage.launchimage
│ │ └── Contents.json
├── JieTableViewCell.swift
├── Info.plist
├── JieDetailViewController.swift
├── videos.plist
├── AppDelegate.swift
├── JieTableViewController.swift
├── Base.lproj
│ └── Main.storyboard
└── JieMain.storyboard
├── JieTableView.xcodeproj
├── xcuserdata
│ └── jiezhang.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── JieTableView.xcscheme
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── jiezhang.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── project.pbxproj
└── JieTableViewTests
├── Info.plist
└── JieTableViewTests.swift
/README.md:
--------------------------------------------------------------------------------
1 | JieTableView
2 | ============
3 |
--------------------------------------------------------------------------------
/JieTableView/default_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhangjie/JieTableView/HEAD/JieTableView/default_img.png
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/xcuserdata/jiezhang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/project.xcworkspace/xcuserdata/jiezhang.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jwzhangjie/JieTableView/HEAD/JieTableView.xcodeproj/project.xcworkspace/xcuserdata/jiezhang.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/JieTableView/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "60x60",
21 | "scale" : "3x"
22 | }
23 | ],
24 | "info" : {
25 | "version" : 1,
26 | "author" : "xcode"
27 | }
28 | }
--------------------------------------------------------------------------------
/JieTableView/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/JieTableView/JieTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JieTableViewCell.swift
3 | // JieTableView
4 | //
5 | // Created by jiezhang on 14-10-5.
6 | // Copyright (c) 2014年 jiezhang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class JieTableViewCell: UITableViewCell {
12 |
13 | @IBOutlet weak var JieVideoImg: UIImageView!
14 | @IBOutlet weak var JieVideoTitle: UILabel!
15 | @IBOutlet weak var JieVideoSubTitle: UILabel!
16 |
17 | override func awakeFromNib() {
18 | super.awakeFromNib()
19 | // Initialization code
20 | }
21 |
22 | override func setSelected(selected: Bool, animated: Bool) {
23 | super.setSelected(selected, animated: animated)
24 |
25 |
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/xcuserdata/jiezhang.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | JieTableView.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 97BCA48F19E133F600ACA78B
16 |
17 | primary
18 |
19 |
20 | 97BCA4A119E133F600ACA78B
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/JieTableViewTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | jwzhanjgie.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/JieTableViewTests/JieTableViewTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JieTableViewTests.swift
3 | // JieTableViewTests
4 | //
5 | // Created by jiezhang on 14-10-5.
6 | // Copyright (c) 2014年 jiezhang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import XCTest
11 |
12 | class JieTableViewTests: XCTestCase {
13 |
14 | override func setUp() {
15 | super.setUp()
16 | // Put setup code here. This method is called before the invocation of each test method in the class.
17 | }
18 |
19 | override func tearDown() {
20 | // Put teardown code here. This method is called after the invocation of each test method in the class.
21 | super.tearDown()
22 | }
23 |
24 | func testExample() {
25 | // This is an example of a functional test case.
26 | XCTAssert(true, "Pass")
27 | }
28 |
29 | func testPerformanceExample() {
30 | // This is an example of a performance test case.
31 | self.measureBlock() {
32 | // Put the code you want to measure the time of here.
33 | }
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/JieTableView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | jwzhanjgie.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UIMainStoryboardFile
26 | JieMain
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/JieTableView/JieDetailViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JieDetailViewController.swift
3 | // JieTableView
4 | //
5 | // Created by jiezhang on 14-10-5.
6 | // Copyright (c) 2014年 jiezhang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MediaPlayer
11 |
12 | class JieDetailViewController: UIViewController {
13 |
14 |
15 | @IBOutlet var big_video_img: UIImageView!
16 | //接受传进来的值
17 | var detailItem: NSDictionary?
18 | var player:MPMoviePlayerViewController!
19 |
20 |
21 | func configureView() {
22 | if let detail : NSDictionary = self.detailItem {
23 | self.title = detail.objectForKey("video_title") as? String
24 | let url : String = detail.objectForKey("video_img") as String
25 | let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))
26 | self.big_video_img.image = UIImage(data: dataImg)
27 | let video_url = NSURL(string: detail.objectForKey("video_url") as String)
28 | player = MPMoviePlayerViewController(contentURL: video_url)
29 | presentViewController(player, animated: true, completion: nil)
30 | }
31 | }
32 |
33 | override func viewDidLoad() {
34 | super.viewDidLoad()
35 | configureView()
36 | }
37 |
38 | override func didReceiveMemoryWarning() {
39 | super.didReceiveMemoryWarning()
40 | // Dispose of any resources that can be recreated.
41 | }
42 |
43 | // MARK: - Navigation
44 | override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
45 |
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/JieTableView/videos.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | video_url
7 | http://v.cctv.com/flash/mp4video28/TMS/2013/05/06/265114d5f2e641278098503f1676d017_h264418000nero_aac32-1.mp4
8 | video_img
9 | http://c.hiphotos.baidu.com/video/pic/item/ae51f3deb48f8c545bc3315739292df5e0fe7fb2.jpg
10 | video_title
11 | 艳遇2:小鲜肉
12 | video_subTitle
13 | 邓天晴 刘帅良
14 |
15 |
16 | video_url
17 | rtmp://lm03.everyon.tv:1935/ptv3/phd4
18 | video_img
19 | http://c.hiphotos.baidu.com/video/pic/item/9825bc315c6034a8ee0a64fbc8134954082376e4.jpg
20 | video_title
21 | 小时代3
22 | video_subTitle
23 | 杨幂 郭采洁
24 |
25 |
26 | video_url
27 | rtmp://lm03.everyon.tv:1935/ptv3/phd507
28 | video_img
29 | http://c.hiphotos.baidu.com/video/pic/item/f703738da97739122ee2d869fb198618377ae2f6.jpg
30 | video_title
31 | 医生
32 | video_subTitle
33 | 金昌烷 裴素恩
34 |
35 |
36 | video_url
37 | http://ts.3gv.ifeng.com/live/iphone/zwt/index_multi.m3u8
38 | video_img
39 | http://d.hiphotos.baidu.com/video/pic/item/b3b7d0a20cf431ad9eb56c424836acaf2edd9861.jpg
40 | video_title
41 | 不再说分手
42 | video_subTitle
43 | 郑伊健 周秀娜
44 |
45 |
46 | video_url
47 | http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8
48 | video_img
49 | http://c.hiphotos.baidu.com/video/pic/item/f703738da977391224eade15fb198618377ae2f2.jpg
50 | video_title
51 | 夜,女人
52 | video_subTitle
53 | 王淑妍 欧定兴
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/JieTableView/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // JieTableView
4 | //
5 | // Created by jiezhang on 14-10-5.
6 | // Copyright (c) 2014年 jiezhang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
18 | return true
19 | }
20 |
21 | func applicationWillResignActive(application: UIApplication!) {
22 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
23 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
24 | }
25 |
26 | func applicationDidEnterBackground(application: UIApplication!) {
27 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
29 | }
30 |
31 | func applicationWillEnterForeground(application: UIApplication!) {
32 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
33 | }
34 |
35 | func applicationDidBecomeActive(application: UIApplication!) {
36 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
37 | }
38 |
39 | func applicationWillTerminate(application: UIApplication!) {
40 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
41 | }
42 |
43 |
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/xcuserdata/jiezhang.xcuserdatad/xcschemes/JieTableView.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/JieTableView/JieTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // JieTableViewController.swift
3 | // JieTableView
4 | //
5 | // Created by jiezhang on 14-10-5.
6 | // Copyright (c) 2014年 jiezhang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class JieTableViewController: UITableViewController {
12 |
13 | var listVideos : NSMutableArray!
14 |
15 | override func viewDidLoad() {
16 | super.viewDidLoad()
17 | var bundle = NSBundle.mainBundle()
18 | let plistPath : String! = bundle.pathForResource("videos", ofType: "plist")
19 | listVideos = NSMutableArray(contentsOfFile: plistPath)
20 | // Uncomment the following line to preserve selection between presentations
21 | // self.clearsSelectionOnViewWillAppear = false
22 |
23 | // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
24 | //下面这段话是设置左边编辑,右边添加item
25 |
26 | self.navigationItem.leftBarButtonItem = self.editButtonItem()
27 | let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "insertNewObject:")
28 | self.navigationItem.rightBarButtonItem = addButton
29 |
30 | }
31 |
32 | func insertNewObject(sender: AnyObject) {
33 | var item : NSDictionary = NSDictionary(objects:["http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8","http://c.hiphotos.baidu.com/video/pic/item/f703738da977391224eade15fb198618377ae2f2.jpg","新增数据", NSDate.date().description] , forKeys: ["video_img","video_title","video_subTitle","video_url"])
34 | listVideos.insertObject(item, atIndex: 0)
35 | let indexPath = NSIndexPath(forRow: 0, inSection: 0)
36 | self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
37 | }
38 |
39 |
40 | override func didReceiveMemoryWarning() {
41 | super.didReceiveMemoryWarning()
42 | // Dispose of any resources that can be recreated.
43 | }
44 |
45 | // MARK: - Table view data source
46 | //返回节的个数
47 | override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
48 | // #warning Potentially incomplete method implementation.
49 | // Return the number of sections.
50 | return 1
51 | }
52 | //返回某个节中的行数
53 | override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
54 | // #warning Incomplete method implementation.
55 | // Return the number of rows in the section.
56 | return listVideos.count
57 | }
58 | //为表视图单元格提供数据,该方法是必须实现的方法
59 | override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
60 | let cellIdentifier : String = "videoItem"
61 | let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as JieTableViewCell
62 | var row = indexPath.row
63 | var rowDict : NSDictionary = listVideos.objectAtIndex(row) as NSDictionary
64 | let url : String = rowDict.objectForKey("video_img") as String
65 | let dataImg : NSData = NSData(contentsOfURL: NSURL(string : url))
66 | cell.JieVideoImg.image = UIImage(data: dataImg)
67 | cell.JieVideoTitle.text = rowDict.objectForKey("video_title") as? String
68 | cell.JieVideoSubTitle.text = rowDict.objectForKey("video_subTitle") as? String
69 | return cell
70 |
71 | }
72 |
73 | override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
74 |
75 | }
76 |
77 | // 支持单元格编辑功能
78 | override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
79 | // Return NO if you do not want the specified item to be editable.
80 | return true
81 | }
82 |
83 | // Override to support editing the table view.
84 | override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
85 | if editingStyle == .Delete {
86 | // Delete the row from the data source
87 | listVideos.removeObjectAtIndex(indexPath.row)
88 | tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
89 | } else if editingStyle == .Insert {
90 | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
91 | }
92 | }
93 |
94 |
95 | // Override to support rearranging the table view.
96 | override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
97 | if fromIndexPath != toIndexPath{
98 | var object: AnyObject = listVideos.objectAtIndex(fromIndexPath.row)
99 | listVideos.removeObjectAtIndex(fromIndexPath.row)
100 | if toIndexPath.row > self.listVideos.count{
101 | self.listVideos.addObject(object)
102 | }else{
103 | self.listVideos.insertObject(object, atIndex: toIndexPath.row)
104 | }
105 | }
106 | }
107 |
108 |
109 |
110 | // Override to support conditional rearranging of the table view.
111 | //在编辑状态,可以拖动设置item位置
112 | override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
113 | // Return NO if you do not want the item to be re-orderable.
114 | return true
115 | }
116 |
117 |
118 |
119 | // MARK: - Navigation
120 |
121 | //给新进入的界面进行传值
122 | override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
123 | if segue.identifier == "showDetail" {
124 | if let indexPath = self.tableView.indexPathForSelectedRow() {
125 | let object : NSDictionary = listVideos[indexPath.row] as NSDictionary
126 | (segue.destinationViewController as JieDetailViewController).detailItem = object
127 | }
128 | }
129 | }
130 |
131 |
132 |
133 |
134 | }
135 |
--------------------------------------------------------------------------------
/JieTableView/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
29 |
30 |
31 |
32 |
33 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/JieTableView/JieMain.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
28 |
29 |
30 |
31 |
32 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/JieTableView.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 978121B619E213E60036AAD0 /* JieMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 978121B519E213E60036AAD0 /* JieMain.storyboard */; };
11 | 97BCA49619E133F600ACA78B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BCA49519E133F600ACA78B /* AppDelegate.swift */; };
12 | 97BCA49D19E133F600ACA78B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97BCA49C19E133F600ACA78B /* Images.xcassets */; };
13 | 97BCA4A919E133F600ACA78B /* JieTableViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BCA4A819E133F600ACA78B /* JieTableViewTests.swift */; };
14 | 97BCA4B519E136B600ACA78B /* JieTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BCA4B419E136B600ACA78B /* JieTableViewController.swift */; };
15 | 97BCA4B719E140A200ACA78B /* JieTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BCA4B619E140A200ACA78B /* JieTableViewCell.swift */; };
16 | 97BCA4B919E141C100ACA78B /* default_img.png in Resources */ = {isa = PBXBuildFile; fileRef = 97BCA4B819E141C100ACA78B /* default_img.png */; };
17 | 97BCA4BB19E1426F00ACA78B /* videos.plist in Resources */ = {isa = PBXBuildFile; fileRef = 97BCA4BA19E1426F00ACA78B /* videos.plist */; };
18 | 97BCA4BD19E168A100ACA78B /* JieDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97BCA4BC19E168A100ACA78B /* JieDetailViewController.swift */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 97BCA4A319E133F600ACA78B /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 97BCA48819E133F600ACA78B /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 97BCA48F19E133F600ACA78B;
27 | remoteInfo = JieTableView;
28 | };
29 | /* End PBXContainerItemProxy section */
30 |
31 | /* Begin PBXFileReference section */
32 | 978121B519E213E60036AAD0 /* JieMain.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = JieMain.storyboard; sourceTree = ""; };
33 | 97BCA49019E133F600ACA78B /* JieTableView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JieTableView.app; sourceTree = BUILT_PRODUCTS_DIR; };
34 | 97BCA49419E133F600ACA78B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
35 | 97BCA49519E133F600ACA78B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
36 | 97BCA49C19E133F600ACA78B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
37 | 97BCA4A219E133F600ACA78B /* JieTableViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JieTableViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
38 | 97BCA4A719E133F600ACA78B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
39 | 97BCA4A819E133F600ACA78B /* JieTableViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JieTableViewTests.swift; sourceTree = ""; };
40 | 97BCA4B419E136B600ACA78B /* JieTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JieTableViewController.swift; sourceTree = ""; };
41 | 97BCA4B619E140A200ACA78B /* JieTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JieTableViewCell.swift; sourceTree = ""; };
42 | 97BCA4B819E141C100ACA78B /* default_img.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = default_img.png; sourceTree = ""; };
43 | 97BCA4BA19E1426F00ACA78B /* videos.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = videos.plist; sourceTree = ""; };
44 | 97BCA4BC19E168A100ACA78B /* JieDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JieDetailViewController.swift; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97BCA48D19E133F600ACA78B /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | 97BCA49F19E133F600ACA78B /* Frameworks */ = {
56 | isa = PBXFrameworksBuildPhase;
57 | buildActionMask = 2147483647;
58 | files = (
59 | );
60 | runOnlyForDeploymentPostprocessing = 0;
61 | };
62 | /* End PBXFrameworksBuildPhase section */
63 |
64 | /* Begin PBXGroup section */
65 | 97BCA48719E133F600ACA78B = {
66 | isa = PBXGroup;
67 | children = (
68 | 97BCA49219E133F600ACA78B /* JieTableView */,
69 | 97BCA4A519E133F600ACA78B /* JieTableViewTests */,
70 | 97BCA49119E133F600ACA78B /* Products */,
71 | );
72 | sourceTree = "";
73 | };
74 | 97BCA49119E133F600ACA78B /* Products */ = {
75 | isa = PBXGroup;
76 | children = (
77 | 97BCA49019E133F600ACA78B /* JieTableView.app */,
78 | 97BCA4A219E133F600ACA78B /* JieTableViewTests.xctest */,
79 | );
80 | name = Products;
81 | sourceTree = "";
82 | };
83 | 97BCA49219E133F600ACA78B /* JieTableView */ = {
84 | isa = PBXGroup;
85 | children = (
86 | 978121B519E213E60036AAD0 /* JieMain.storyboard */,
87 | 97BCA49519E133F600ACA78B /* AppDelegate.swift */,
88 | 97BCA4B419E136B600ACA78B /* JieTableViewController.swift */,
89 | 97BCA4B619E140A200ACA78B /* JieTableViewCell.swift */,
90 | 97BCA4BC19E168A100ACA78B /* JieDetailViewController.swift */,
91 | 97BCA49C19E133F600ACA78B /* Images.xcassets */,
92 | 97BCA49319E133F600ACA78B /* Supporting Files */,
93 | );
94 | path = JieTableView;
95 | sourceTree = "";
96 | };
97 | 97BCA49319E133F600ACA78B /* Supporting Files */ = {
98 | isa = PBXGroup;
99 | children = (
100 | 97BCA4B819E141C100ACA78B /* default_img.png */,
101 | 97BCA49419E133F600ACA78B /* Info.plist */,
102 | 97BCA4BA19E1426F00ACA78B /* videos.plist */,
103 | );
104 | name = "Supporting Files";
105 | sourceTree = "";
106 | };
107 | 97BCA4A519E133F600ACA78B /* JieTableViewTests */ = {
108 | isa = PBXGroup;
109 | children = (
110 | 97BCA4A819E133F600ACA78B /* JieTableViewTests.swift */,
111 | 97BCA4A619E133F600ACA78B /* Supporting Files */,
112 | );
113 | path = JieTableViewTests;
114 | sourceTree = "";
115 | };
116 | 97BCA4A619E133F600ACA78B /* Supporting Files */ = {
117 | isa = PBXGroup;
118 | children = (
119 | 97BCA4A719E133F600ACA78B /* Info.plist */,
120 | );
121 | name = "Supporting Files";
122 | sourceTree = "";
123 | };
124 | /* End PBXGroup section */
125 |
126 | /* Begin PBXNativeTarget section */
127 | 97BCA48F19E133F600ACA78B /* JieTableView */ = {
128 | isa = PBXNativeTarget;
129 | buildConfigurationList = 97BCA4AC19E133F600ACA78B /* Build configuration list for PBXNativeTarget "JieTableView" */;
130 | buildPhases = (
131 | 97BCA48C19E133F600ACA78B /* Sources */,
132 | 97BCA48D19E133F600ACA78B /* Frameworks */,
133 | 97BCA48E19E133F600ACA78B /* Resources */,
134 | );
135 | buildRules = (
136 | );
137 | dependencies = (
138 | );
139 | name = JieTableView;
140 | productName = JieTableView;
141 | productReference = 97BCA49019E133F600ACA78B /* JieTableView.app */;
142 | productType = "com.apple.product-type.application";
143 | };
144 | 97BCA4A119E133F600ACA78B /* JieTableViewTests */ = {
145 | isa = PBXNativeTarget;
146 | buildConfigurationList = 97BCA4AF19E133F600ACA78B /* Build configuration list for PBXNativeTarget "JieTableViewTests" */;
147 | buildPhases = (
148 | 97BCA49E19E133F600ACA78B /* Sources */,
149 | 97BCA49F19E133F600ACA78B /* Frameworks */,
150 | 97BCA4A019E133F600ACA78B /* Resources */,
151 | );
152 | buildRules = (
153 | );
154 | dependencies = (
155 | 97BCA4A419E133F600ACA78B /* PBXTargetDependency */,
156 | );
157 | name = JieTableViewTests;
158 | productName = JieTableViewTests;
159 | productReference = 97BCA4A219E133F600ACA78B /* JieTableViewTests.xctest */;
160 | productType = "com.apple.product-type.bundle.unit-test";
161 | };
162 | /* End PBXNativeTarget section */
163 |
164 | /* Begin PBXProject section */
165 | 97BCA48819E133F600ACA78B /* Project object */ = {
166 | isa = PBXProject;
167 | attributes = {
168 | LastUpgradeCheck = 0600;
169 | ORGANIZATIONNAME = jiezhang;
170 | TargetAttributes = {
171 | 97BCA48F19E133F600ACA78B = {
172 | CreatedOnToolsVersion = 6.0;
173 | };
174 | 97BCA4A119E133F600ACA78B = {
175 | CreatedOnToolsVersion = 6.0;
176 | TestTargetID = 97BCA48F19E133F600ACA78B;
177 | };
178 | };
179 | };
180 | buildConfigurationList = 97BCA48B19E133F600ACA78B /* Build configuration list for PBXProject "JieTableView" */;
181 | compatibilityVersion = "Xcode 3.2";
182 | developmentRegion = English;
183 | hasScannedForEncodings = 0;
184 | knownRegions = (
185 | en,
186 | Base,
187 | );
188 | mainGroup = 97BCA48719E133F600ACA78B;
189 | productRefGroup = 97BCA49119E133F600ACA78B /* Products */;
190 | projectDirPath = "";
191 | projectRoot = "";
192 | targets = (
193 | 97BCA48F19E133F600ACA78B /* JieTableView */,
194 | 97BCA4A119E133F600ACA78B /* JieTableViewTests */,
195 | );
196 | };
197 | /* End PBXProject section */
198 |
199 | /* Begin PBXResourcesBuildPhase section */
200 | 97BCA48E19E133F600ACA78B /* Resources */ = {
201 | isa = PBXResourcesBuildPhase;
202 | buildActionMask = 2147483647;
203 | files = (
204 | 97BCA4BB19E1426F00ACA78B /* videos.plist in Resources */,
205 | 97BCA49D19E133F600ACA78B /* Images.xcassets in Resources */,
206 | 97BCA4B919E141C100ACA78B /* default_img.png in Resources */,
207 | 978121B619E213E60036AAD0 /* JieMain.storyboard in Resources */,
208 | );
209 | runOnlyForDeploymentPostprocessing = 0;
210 | };
211 | 97BCA4A019E133F600ACA78B /* Resources */ = {
212 | isa = PBXResourcesBuildPhase;
213 | buildActionMask = 2147483647;
214 | files = (
215 | );
216 | runOnlyForDeploymentPostprocessing = 0;
217 | };
218 | /* End PBXResourcesBuildPhase section */
219 |
220 | /* Begin PBXSourcesBuildPhase section */
221 | 97BCA48C19E133F600ACA78B /* Sources */ = {
222 | isa = PBXSourcesBuildPhase;
223 | buildActionMask = 2147483647;
224 | files = (
225 | 97BCA4B519E136B600ACA78B /* JieTableViewController.swift in Sources */,
226 | 97BCA49619E133F600ACA78B /* AppDelegate.swift in Sources */,
227 | 97BCA4BD19E168A100ACA78B /* JieDetailViewController.swift in Sources */,
228 | 97BCA4B719E140A200ACA78B /* JieTableViewCell.swift in Sources */,
229 | );
230 | runOnlyForDeploymentPostprocessing = 0;
231 | };
232 | 97BCA49E19E133F600ACA78B /* Sources */ = {
233 | isa = PBXSourcesBuildPhase;
234 | buildActionMask = 2147483647;
235 | files = (
236 | 97BCA4A919E133F600ACA78B /* JieTableViewTests.swift in Sources */,
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | /* End PBXSourcesBuildPhase section */
241 |
242 | /* Begin PBXTargetDependency section */
243 | 97BCA4A419E133F600ACA78B /* PBXTargetDependency */ = {
244 | isa = PBXTargetDependency;
245 | target = 97BCA48F19E133F600ACA78B /* JieTableView */;
246 | targetProxy = 97BCA4A319E133F600ACA78B /* PBXContainerItemProxy */;
247 | };
248 | /* End PBXTargetDependency section */
249 |
250 | /* Begin XCBuildConfiguration section */
251 | 97BCA4AA19E133F600ACA78B /* Debug */ = {
252 | isa = XCBuildConfiguration;
253 | buildSettings = {
254 | ALWAYS_SEARCH_USER_PATHS = NO;
255 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
256 | CLANG_CXX_LIBRARY = "libc++";
257 | CLANG_ENABLE_MODULES = YES;
258 | CLANG_ENABLE_OBJC_ARC = YES;
259 | CLANG_WARN_BOOL_CONVERSION = YES;
260 | CLANG_WARN_CONSTANT_CONVERSION = YES;
261 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
262 | CLANG_WARN_EMPTY_BODY = YES;
263 | CLANG_WARN_ENUM_CONVERSION = YES;
264 | CLANG_WARN_INT_CONVERSION = YES;
265 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
266 | CLANG_WARN_UNREACHABLE_CODE = YES;
267 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
268 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
269 | COPY_PHASE_STRIP = NO;
270 | ENABLE_STRICT_OBJC_MSGSEND = YES;
271 | GCC_C_LANGUAGE_STANDARD = gnu99;
272 | GCC_DYNAMIC_NO_PIC = NO;
273 | GCC_OPTIMIZATION_LEVEL = 0;
274 | GCC_PREPROCESSOR_DEFINITIONS = (
275 | "DEBUG=1",
276 | "$(inherited)",
277 | );
278 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
281 | GCC_WARN_UNDECLARED_SELECTOR = YES;
282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
283 | GCC_WARN_UNUSED_FUNCTION = YES;
284 | GCC_WARN_UNUSED_VARIABLE = YES;
285 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
286 | MTL_ENABLE_DEBUG_INFO = YES;
287 | ONLY_ACTIVE_ARCH = YES;
288 | SDKROOT = iphoneos;
289 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
290 | };
291 | name = Debug;
292 | };
293 | 97BCA4AB19E133F600ACA78B /* Release */ = {
294 | isa = XCBuildConfiguration;
295 | buildSettings = {
296 | ALWAYS_SEARCH_USER_PATHS = NO;
297 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
298 | CLANG_CXX_LIBRARY = "libc++";
299 | CLANG_ENABLE_MODULES = YES;
300 | CLANG_ENABLE_OBJC_ARC = YES;
301 | CLANG_WARN_BOOL_CONVERSION = YES;
302 | CLANG_WARN_CONSTANT_CONVERSION = YES;
303 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
304 | CLANG_WARN_EMPTY_BODY = YES;
305 | CLANG_WARN_ENUM_CONVERSION = YES;
306 | CLANG_WARN_INT_CONVERSION = YES;
307 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
308 | CLANG_WARN_UNREACHABLE_CODE = YES;
309 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
310 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
311 | COPY_PHASE_STRIP = YES;
312 | ENABLE_NS_ASSERTIONS = NO;
313 | ENABLE_STRICT_OBJC_MSGSEND = YES;
314 | GCC_C_LANGUAGE_STANDARD = gnu99;
315 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
316 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
317 | GCC_WARN_UNDECLARED_SELECTOR = YES;
318 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
319 | GCC_WARN_UNUSED_FUNCTION = YES;
320 | GCC_WARN_UNUSED_VARIABLE = YES;
321 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
322 | MTL_ENABLE_DEBUG_INFO = NO;
323 | SDKROOT = iphoneos;
324 | VALIDATE_PRODUCT = YES;
325 | };
326 | name = Release;
327 | };
328 | 97BCA4AD19E133F600ACA78B /* Debug */ = {
329 | isa = XCBuildConfiguration;
330 | buildSettings = {
331 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
332 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
333 | INFOPLIST_FILE = JieTableView/Info.plist;
334 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
335 | PRODUCT_NAME = "$(TARGET_NAME)";
336 | };
337 | name = Debug;
338 | };
339 | 97BCA4AE19E133F600ACA78B /* Release */ = {
340 | isa = XCBuildConfiguration;
341 | buildSettings = {
342 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
343 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
344 | INFOPLIST_FILE = JieTableView/Info.plist;
345 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
346 | PRODUCT_NAME = "$(TARGET_NAME)";
347 | };
348 | name = Release;
349 | };
350 | 97BCA4B019E133F600ACA78B /* Debug */ = {
351 | isa = XCBuildConfiguration;
352 | buildSettings = {
353 | BUNDLE_LOADER = "$(TEST_HOST)";
354 | FRAMEWORK_SEARCH_PATHS = (
355 | "$(SDKROOT)/Developer/Library/Frameworks",
356 | "$(inherited)",
357 | );
358 | GCC_PREPROCESSOR_DEFINITIONS = (
359 | "DEBUG=1",
360 | "$(inherited)",
361 | );
362 | INFOPLIST_FILE = JieTableViewTests/Info.plist;
363 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
364 | PRODUCT_NAME = "$(TARGET_NAME)";
365 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JieTableView.app/JieTableView";
366 | };
367 | name = Debug;
368 | };
369 | 97BCA4B119E133F600ACA78B /* Release */ = {
370 | isa = XCBuildConfiguration;
371 | buildSettings = {
372 | BUNDLE_LOADER = "$(TEST_HOST)";
373 | FRAMEWORK_SEARCH_PATHS = (
374 | "$(SDKROOT)/Developer/Library/Frameworks",
375 | "$(inherited)",
376 | );
377 | INFOPLIST_FILE = JieTableViewTests/Info.plist;
378 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
379 | PRODUCT_NAME = "$(TARGET_NAME)";
380 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JieTableView.app/JieTableView";
381 | };
382 | name = Release;
383 | };
384 | /* End XCBuildConfiguration section */
385 |
386 | /* Begin XCConfigurationList section */
387 | 97BCA48B19E133F600ACA78B /* Build configuration list for PBXProject "JieTableView" */ = {
388 | isa = XCConfigurationList;
389 | buildConfigurations = (
390 | 97BCA4AA19E133F600ACA78B /* Debug */,
391 | 97BCA4AB19E133F600ACA78B /* Release */,
392 | );
393 | defaultConfigurationIsVisible = 0;
394 | defaultConfigurationName = Release;
395 | };
396 | 97BCA4AC19E133F600ACA78B /* Build configuration list for PBXNativeTarget "JieTableView" */ = {
397 | isa = XCConfigurationList;
398 | buildConfigurations = (
399 | 97BCA4AD19E133F600ACA78B /* Debug */,
400 | 97BCA4AE19E133F600ACA78B /* Release */,
401 | );
402 | defaultConfigurationIsVisible = 0;
403 | defaultConfigurationName = Release;
404 | };
405 | 97BCA4AF19E133F600ACA78B /* Build configuration list for PBXNativeTarget "JieTableViewTests" */ = {
406 | isa = XCConfigurationList;
407 | buildConfigurations = (
408 | 97BCA4B019E133F600ACA78B /* Debug */,
409 | 97BCA4B119E133F600ACA78B /* Release */,
410 | );
411 | defaultConfigurationIsVisible = 0;
412 | defaultConfigurationName = Release;
413 | };
414 | /* End XCConfigurationList section */
415 | };
416 | rootObject = 97BCA48819E133F600ACA78B /* Project object */;
417 | }
418 |
--------------------------------------------------------------------------------