Skip to content

Instantly share code, notes, and snippets.

@benpackard
benpackard / Fetching MLB Scores for isPizzaHalfPrice
Created May 6, 2022 13:49
This PHP script is supposed to scrape MLB scores from ESPN but stopped working recently.
<?php
class Game {
public $espn_id, $date, $home_team, $visiting_team, $home_score, $visiting_score, $is_preseason;
}
$urls = build_URLs();
$games = array();
foreach ($urls as $url) {
$games = array_merge($games, get_games($url));
@benpackard
benpackard / EnumeratedSegmentedControl.swift
Created November 13, 2018 15:09
Set and get selected enum case from a `UISegmentedControl` without relying on indexes or strings.
import UIKit
protocol Segmentable: RawRepresentable & CaseIterable { }
class EnumeratedSegmentedControl<T: Segmentable>: UISegmentedControl where T.RawValue == String {
convenience init() {
let items = T.allCases.map { $0.rawValue }
self.init(items: items)
}
@benpackard
benpackard / LargeTitleAdjustingNavigationController.swift
Last active November 10, 2018 18:18
A `UINavigationController` that adjusts the font size of its large title labels to fit its content
import UIKit
/// A `UINavigationController` that adjusts the font size of its large title labels to fit its content
class TitleSizeAdjustingNavigationController: UINavigationController {
var minimumScaleFactor: CGFloat = 0.5
override func viewDidLayoutSubviews() {
guard navigationBar.prefersLargeTitles else { return }
updateLargeTitleLabels()
@benpackard
benpackard / SelfSizingTableHeaderAndTableFooterViews.swift
Last active December 18, 2017 00:28 — forked from smileyborg/SelfSizingTableHeaderAndTableFooterViews.swift
How to manually self-size UITableView tableHeaderView/tableFooterView in iOS 11
// For the best results, your tableHeaderView/tableFooterView should be a UITableViewHeaderFooterView with your content inside the contentView.
let tableHeaderView = UITableViewHeaderFooterView()
let fittingSize = CGSize(width: tableView.bounds.width - (tableView.safeAreaInsets.left + tableView.safeAreaInsets.right), height: 0)
let size = tableHeaderView.systemLayoutSizeFitting(fittingSize, withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel)
tableHeaderView.frame = CGRect(origin: .zero, size: size)
tableView.tableHeaderView = tableHeaderView
// In particular, note that we call systemLayoutSizeFitting on the contentView of the UITableViewHeaderFooterView.
// When you set this view to the tableHeaderView/tableFooterView on the table view, the table view will preserve the existing size of its frame.
@benpackard
benpackard / UIViewController+InputAccessory.swift
Last active November 3, 2017 11:03
UIViewController extension to add Previous, Next, and Done buttons to a group of UITextFields
extension UIViewController {
func addInputAccessoryForTextFields(textFields: [UITextField], dismissable: Bool = true, previousNextable: Bool = false) {
for (index, textField) in textFields.enumerate() {
let toolbar: UIToolbar = UIToolbar()
toolbar.sizeToFit()
var items = [UIBarButtonItem]()
if previousNextable {
let previousButton = UIBarButtonItem(image: UIImage(named: "Backward Arrow"), style: .Plain, target: nil, action: nil)
previousButton.width = 30
@benpackard
benpackard / UIViewController+InputAccessory.swift
Last active May 10, 2016 04:03
UIViewController extension to add Done button to a UITextField
extension UIViewController {
func addDismissingInputAccessoryToTextField(textField: UITextField) {
let doneButton = UIBarButtonItem(barButtonSystemItem: .Done, target: view, action: #selector(UIView.endEditing))
let toolbar: UIToolbar = UIToolbar()
toolbar.sizeToFit()
let spacer = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
toolbar.setItems([spacer, doneButton], animated: false)
textField.inputAccessoryView = toolbar
}
}
@benpackard
benpackard / Feedable.swift
Created March 31, 2016 03:53
Feedable protocol for Array of Photos
import Foundation
class Photo {
let title: String
init(title: String) {
self.title = title
}
}