mirror of
https://github.com/amix/vimrc
synced 2025-07-11 21:55:01 +08:00
add cocoa.vim & swift.vim
This commit is contained in:
124
sources_non_forked/swift.vim/example/MainViewController.swift
Normal file
124
sources_non_forked/swift.vim/example/MainViewController.swift
Normal file
@ -0,0 +1,124 @@
|
||||
//
|
||||
// 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!")
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user