1
0
Fork 0
mirror of synced 2024-07-02 13:31:09 -04:00
ultimate-vim/sources_non_forked/swift.vim/example/MainViewController.swift
2017-11-27 13:43:13 +08:00

125 lines
3.9 KiB
Swift

//
// MainViewController.swift
// HackerNews
//
// Copyright (c) 2014 Amit Burstein. All rights reserved.
// See LICENSE for licensing information.
//
// Abstract:
// Handles fetching and displaying posts from Hacker News.
//
import UIKit
import QuartzCore
class MainViewController: UIViewController, UITableViewDataSource {
// MARK: Properties
let postCellIdentifier = "PostCell"
let showBrowserIdentifier = "ShowBrowser"
var postFilter = PostFilterType.Top
var posts = HNPost[]()
var refreshControl = UIRefreshControl()
@IBOutlet var tableView: UITableView
// MARK: Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
configureUI()
fetchPosts()
}
override func viewWillAppear(animated: Bool) {
tableView.deselectRowAtIndexPath(tableView.indexPathForSelectedRow(), animated: animated)
super.viewWillAppear(animated)
}
// MARK: Functions
func configureUI() {
refreshControl.addTarget(self, action: "fetchPosts", forControlEvents: .ValueChanged)
refreshControl.attributedTitle = NSAttributedString(string: "Pull to Refresh")
tableView.insertSubview(refreshControl, atIndex: 0)
}
func fetchPosts() {
UIApplication.sharedApplication().networkActivityIndicatorVisible = true;
HNManager.sharedManager().loadPostsWithFilter(postFilter, completion: { posts in
if (posts != nil && posts.count > 0) {
self.posts = posts as HNPost[]
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Fade)
self.refreshControl.endRefreshing()
UIApplication.sharedApplication().networkActivityIndicatorVisible = false
})
} else {
println("Could not fetch posts!")
self.refreshControl.endRefreshing()
UIApplication.sharedApplication().networkActivityIndicatorVisible = false;
}
})
}
func stylePostCellAsRead(cell: UITableViewCell) {
cell.textLabel.textColor = UIColor(red: 119/255.0, green: 119/255.0, blue: 119/255.0, alpha: 1)
cell.detailTextLabel.textColor = UIColor(red: 153/255.0, green: 153/255.0, blue: 153/255.0, alpha: 1)
}
// MARK: UITableViewDataSource
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier(postCellIdentifier) as UITableViewCell
let post = posts[indexPath.row]
if HNManager.sharedManager().hasUserReadPost(post) {
stylePostCellAsRead(cell)
}
cell.textLabel.text = post.Title
cell.detailTextLabel.text = "\(post.Points) points by \(post.Username)"
return cell
}
// MARK: UIViewController
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) {
if segue.identifier == showBrowserIdentifier {
let webView = segue.destinationViewController as BrowserViewController
let cell = sender as UITableViewCell
let post = posts[tableView.indexPathForCell(cell).row]
HNManager.sharedManager().setMarkAsReadForPost(post)
stylePostCellAsRead(cell)
webView.post = post
}
}
// MARK: IBActions
@IBAction func changePostFilter(sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
postFilter = .Top
fetchPosts()
case 1:
postFilter = .New
fetchPosts()
case 2:
postFilter = .Ask
fetchPosts()
default:
println("Bad segment index!")
}
}
}